如何在 block 中修改外部变量

2017-11-30  本文已影响24人  管乐_VICTOR

block 是为了支持并行编程,对于普通的 local 变量,我们就不能在 block 里边修改,因为 block 可以被多个线程并行运行,会有问题的,如果在 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
上一篇下一篇

猜你喜欢

热点阅读