iOS小知识

iOS--Variable is not assignable

2018-08-21  本文已影响0人  彬至睢阳

 NSString*asyncStr =@"4";

    NSLog(@"%@",asyncStr);

    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        asyncStr =@"5";

        NSLog(@"%@",asyncStr);

    });

    asyncStr =@"6";

    NSLog(@"%@",asyncStr);

  当我们在block代码块中使用局部变量时,就会很容易出现如下的错误:Variable is not assignable (missing __block type specifier)即变量是不可修改的

 解决的办法:在变量声明时加上static或__block关键字就可以了

 理由:在block内部使用block外部定义的局部变量时,如果变量没有被__block修饰,则在block内部是只读的,不能对他进行修改,如果想要修改,变量前要有__block修饰。

 __block的作用告诉编译器,编译时在block内部不要把外部变量当做常量使用,还是要当做变量使用.

  如果在block中访问全局变量以及static修饰的变量,就不需要__block修饰.理由:static修饰的变量以及全局变量都是存储在内存中的全局区(静态区),block内部是捕获了其指针,则可以直接访问修改;而对于之前的临时变量,block则只是捕获了该变量的值,无法修改到外部的变量会报错。

上一篇下一篇

猜你喜欢

热点阅读