iOS:块和ivars

时间:2014-05-25 21:19:16

标签: ios objective-c objective-c-blocks retain-cycle

在很多问题中,人们会问是否可以在中使用 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传递给块之前对其进行弱引用吗?

1 个答案:

答案 0 :(得分:5)

使用ivar(属性,无论如何)就像使用self一样 - 你隐含地使用了self。您需要执行weak-strong dance

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