block 是为了支持并行编程,对于普通的 local 变量,我们就不能在 block 里边修改,因为 block 可以被多个线程并行运行,会有问题的,如果在 block 中修改普通变量,编译的时候也会报错。
有两种方法:
- 可以修改static全局变量;
- 可以修改用关键字 __block 修饰变量;
__block int blockNum = 100;
static int staticNum = 100;
void (^aBlock)(void) = ^(void) {
NSLog(@">> Num: %d and %d\n",blockNum, staticNum);
blockNum++;
staticNum++;
};
aBlock();
NSLog(@">> ALL: %d and %d\n",blockNum, staticNum);
// 打印结果如下
2017-11-30 17:14:43.760052+0800 test[3189:527677] >> Num: 100 and 100
2017-11-30 17:14:50.510695+0800 test[3189:527677] >> ALL: 101 and 101
网友评论