让我们说你有这样的事情:
ivarOutsideOfBlock = @"foo";
[doSomethingThatTakesAwhile start:^(NSError *error) {
if(!error){
ivarOutsideOfBlock = @"somethingElse";
// Might crash because iVarOutsideOfBlock may no longer exist
}
}];
此时,让我们说对视图控制器ivar的引用得到了解决。代码会崩溃(INVALID ADDRESS)?
围绕此最佳做法是什么?它是否将ivar转换为视图控制器上的强属性?
答案 0 :(得分:2)
Block中对ivar的引用隐含viewController->ivar
,而Block强烈引用了ivar的所有者。它不会在阻止之前解除分配。
看起来你实际上有retain cycle,因为Block的所有者与引用的对象相同。这是有问题的:Block和另一个对象保持活着,并且都不能被释放。