在很多问题中,人们会问是否可以在块中使用 self 。答案是否定的,以避免保留周期。
现在,当我在UIViewController
的块中使用“ivar”时,应该没问题。但是当我使用时:
- (void)viewDidLoad
{
[_customCell setChangedValueBlock:^{
if(_object != nil){
NSLog(@"This is a sample");
}
}];
}
dealloc
方法从未调用过:
-(void)dealloc{
NSLog(@"Dealloc");
}
当我删除 if(_object != nil){
时,会调用dealloc
方法。
我应该在将_object
传递给块之前对其进行弱引用吗?
答案 0 :(得分:5)
使用ivar(属性,无论如何)就像使用self一样 - 你隐含地使用了self。您需要执行weak-strong dance。
通过属性传递会好得多,因为它可以成为线程安全的,因为直接在已发布的弱引用上访问实例变量会导致设备爆炸。