假设您有这样的事情:
ivarOutsideOfBlock = @"foo";
[doSomethingThatTakesAwhile start:^(NSError *error) {
if(!error){
ivarOutsideOfBlock = @"somethingElse";
// Might crash because iVarOutsideOfBlock may no longer exist
}
}];
此时,假设对 View Controller ivar 的引用被释放。代码会崩溃吗(INVALID ADDRESS)?
这方面的最佳做法是什么?是不是把ivar转成view controller上的strong property?
最佳答案
Block 中对 ivar 的引用是隐式的 viewController->ivar
,并且 Block 对 ivar 的 owner 进行了强引用。它不会在 block 被释放之前被释放。
看起来你实际上有一个 retain cycle因为 Block 的所有者与引用对象相同。这是有问题的:Block 和另一个对象使彼此保持事件状态,并且都不能被释放。
关于ios - 当 block 内的 ivar 可能被释放时,管理内存的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29107312/