2

在很多问题中,都会询问是否可以在blocks中使用self。答案是否定的,避免保留循环。

现在,当我在我的块中使用“ivar”时UIViewController应该没问题。但是当我使用:

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

dealloc方法从未调用过:

-(void)dealloc{
    NSLog(@"Dealloc");
}

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

_object在将它传递给块之前我应该​​对它进行弱引用吗?

4

1 回答 1

5

使用 ivar(属性,随便)就像使用 self 一样——你已经隐式使用了 self。你需要跳弱强舞

但是,通过属性传递会更好,因为它可以成为线程安全的,并且直接在释放的弱引用上访问实例变量会导致您的设备爆炸。

于 2014-05-25T21:28:53.150 回答