/**
block内部默认不允许修改外部变量的值
*/
- (void)blockDemo3 {
__blockint i =10;
NSLog(@"%p", &i);
void (^block)() = ^ {
// 0x7ff......堆区地址
NSLog(@"hello %d %p", i, &i);
// 注意:block内部默认不允许修改外部变量的值
i = 20;
};
// 一旦使用了 __block,定义block完成后,变量i的地址就变成了堆区的地址
// 和 block中的地址一致
NSLog(@"===> %p", &i);
// 当作参数传递 block
[selfcallBlock:block];
NSLog(@"%d", i);
}
- (void)callBlock:(void (^)())block {
NSLog(@"干点什么");
// 执行 block
block();
}