美文网首页iOS小知识
iOS--Variable is not assignable

iOS--Variable is not assignable

作者: 彬至睢阳 | 来源:发表于2018-08-21 14:32 被阅读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则只是捕获了该变量的值,无法修改到外部的变量会报错。

    相关文章

      网友评论

        本文标题:iOS--Variable is not assignable

        本文链接:https://www.haomeiwen.com/subject/smxjiftx.html