我是否必须连续声明弱引用以打破嵌套block的保留循环?
__weak typeof(self) weakSelf = self;
[self setMyBlock:^(id obj, NSUInteger idx, BOOL *stop) {
typeof(self) strongSelf = weakSelf;
[strongSelf doSomething];
[strongSelf setMyBlock:^(id obj, NSUInteger idx, BOOL *stop) {
//do I need to create another weak reference to strongSelf for this block?
[strongSelf doSomething];
}];
}];
最佳答案
恐怕是这样。 [strongSelf setMyBlock:<inner block>]
会导致self
保留内部 block 。如果内部 block 对 self
有强引用,就是一个循环。 strongSelf
的事实变量被分配来自一个__weak
限定变量本来没有什么区别。
正如其他一些用户提到的,您可以使用原始的 weakSelf
而不是创建一个新的。您创建 strongSelf
的原因 block 中的引用是否则 self
block 运行时可能会被释放。 strongSelf
要么结束 nil
(如果 self
在 strongSelf
被分配之前被释放,但这不会造成伤害)否则 self
在执行 block 时不会被释放,因为你有一个强引用。在你对self
有强烈引用的时候, 原文weakSelf
也可以安全使用,因为self
不会被释放。
关于ios - 保留 block 内部 block 的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30602436/