最近我了解到如果我需要保留一个块对象,我应该复制该块,因为它是在堆栈上创建的。
然后我回顾了我的一些代码。我发现我正在做类似的事情:
@implementation MyView
...
-(void) addButton:(NSString *)title clickAction:(void ^(void)) action {
[self.buttons addObject:@[ title, action ] ];
}
-(void) createButtons { ... }
...
@end
...
// Somewhere in my project:
-(void) init {
MyView *view = [MyView new];
[view addButton:@"OK" clickAction:^{ NSLog(@"OK"); }];
[view addButton:@"Cancel" clickAction:^{ NSLog(@"Cancel"); }];
}
基本上,我向 MyView 添加了一些按钮信息。在某些时候,MyView 将创建按钮。当按钮被点击时,MyView 会找出对应的 clickAction,并调用它。
奇怪的是,这个程序运行良好,没有异常,没有错误。
那么,为什么程序在不复制块对象的情况下运行呢?
其他信息:* iphone app (4.3 - 6.0) * 非 ARC * XCode 4.5