总结:
1、NSStackBlock在函数返回时销毁,NSMallocBlock引用计数为0时释放;
2、viewcontroller对象的NSGlobalBlock全局block在对象释放时销毁,NSGlobalBlock局部block在函数返回时销毁;
例:xcode的mrc下,引用外部变量时block在栈区,栈区block在函数返回时已经销毁;
@interface ViewController ()
{
void (^block)(void);
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
NSInteger i = 11;
block = ^{
NSLog(@"%ld", i);
};
NSLog(@"1%@", block);
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
block();
}
输出:
NSStackBlock,且程序崩溃;
附图:栈block已经销毁
说明:栈区block在函数返回时已经销毁,尝试把block拷贝到堆区(copy方法)就不会销毁了;