比较以下两段代码输出值
代码一:
@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 来标识。