我正在阅读Xcode的文档,这使我感到困惑:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
以下是从文档中复制的:
块是对其捕获的变量的有力参考。如果
self
在块内使用,则该块形成对的强引用self
,因此,如果self
对块也有强引用(通常这样做),则会产生强引用循环。为了避免循环,您需要__block
在块外创建一个对自身的弱引用(或引用),如上例所示。
我不明白“弱(或__block
)”是什么意思?
是
__block typeof(self) tmpSelf = self;
和
__weak typeof(self) tmpSelf = self;
这里完全一样吗?
我在文档中发现了另外一块:
注意:在垃圾回收的环境中,如果将
__weak
和__block
修饰符都应用于变量,则该块将无法确保其保持活动状态。
所以,我完全不解。