在很多问题中,都会询问是否可以在 block 中使用self。答案是否定的,以避免循环引用。
现在,当我在我的 UIViewController
的 block 中使用“ivar”时应该没问题。但是当我使用时:
- (void)viewDidLoad
{
[_customCell setChangedValueBlock:^{
if(_object != nil){
NSLog(@"This is a sample");
}
}];
}
dealloc
从未调用过的方法:
-(void)dealloc{
NSLog(@"Dealloc");
}
当我删除 if(_object != nil){
,dealloc
方法被调用。
我应该弱引用 _object
在将其传递给 block 之前?
最佳答案
使用 ivar(属性,无论什么)与使用 self 完全相同 - 你已经隐式使用了 self。您需要执行weak-strong dance .
不过,通过属性传递会更好,因为它可以成为线程安全的,并且直接在已释放的弱引用上访问实例变量将导致您的设备爆炸。
关于iOS: block 和 ivars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860055/