iOS:块和ivars

Ori*_*itm 2 objective-c ios objective-c-blocks retain-cycle

在很多问题中,它被问到是否可以在块中使用self.答案是否定的,避免保留周期.

现在,当我在我的块中使用"ivar"时,UIViewController它应该没问题.但是当我使用时:

- (void)viewDidLoad
{
    [_customCell setChangedValueBlock:^{
        if(_object != nil){
            NSLog(@"This is a sample");
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

dealloc方法从未调用过:

-(void)dealloc{
    NSLog(@"Dealloc");
}
Run Code Online (Sandbox Code Playgroud)

当我删除时if(_object != nil){,dealloc调用该方法.

我应该_object在将它传递给块之前做弱引用吗?

mat*_*att 5

使用ivar(属性,无论如何)就像使用self一样 - 你隐含地使用了self.你需要做一个弱强的舞蹈.

但是,传递一个属性会好得多,因为它可以成为线程安全的,因为直接在已发布的弱引用上访问实例变量会导致设备爆炸.