Blocks中的__block

来源:互联网 发布:qq聊天软件下载 编辑:程序博客网 时间:2024/06/10 16:53

比较以下两段代码输出值

代码一:

@autoreleasepool {        int foo = 10;        void (^printFoo)(void) = ^(void){            NSLog(@"foo = %i",foo);            foo = 20; // 该行在编译时会产生编译错误        };        foo = 15;        printFoo();        NSLog(@"foo = %i",foo);    }

输出结果:foo = 10
foo = 15

代码二:

@autoreleasepool {        __block int foo = 10;        void (^printFoo)(void) = ^(void){            NSLog(@"%i",foo);            foo = 20;        };        foo = 15;        printFoo();        NSLog(@"%i",foo);    }

输出结果: foo = 15
foo = 20

  • 若要在块(Blocks)中对变量进行修改,则变量需要用__block 来标识。
0 0