【发布时间】:2012-07-31 04:20:52
【问题描述】:
我正在阅读 Xcode 的文档,这让我感到困惑:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
以下内容来自文档:
块形成对其捕获的变量的强引用。如果你使用
self在一个块内,该块形成一个对self的强引用,所以如果self还具有对块的强引用(通常 确实),一个强大的参考循环结果。为了避免循环,您需要 在块外创建对 self 的弱(或__block)引用,如 在上面的例子中。
我不明白“弱(或__block)”是什么意思?
是
__block typeof(self) tmpSelf = self;
和
__weak typeof(self) tmpSelf = self;
这里一模一样?
我在文档中发现了另一篇文章:
注意:在垃圾收集环境中,如果您同时应用
__weak和__block对变量进行修饰符,则该块将无法确保它保持活动状态。
所以,我完全感到困惑。
【问题讨论】:
标签: objective-c memory-management objective-c-blocks weak-references ownership