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则只是捕获了该变量的值,无法修改到外部的变量会报错。
网友评论