__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ { [tmpSelf doSomething];
}];
以下内容摘自官方文档:
块会对其捕获的变量形成强引用。如果在块内使用了
self
,块会对self
形成强引用,因此如果self
也对该块形成了强引用(通常情况下是这样),就会形成强引用循环。为避免循环,需要在块外创建一个对self
的弱引用(或__block
引用),就像上面的示例一样。
我不理解'weak (or __block
)'是什么意思?
是的。
__block typeof(self) tmpSelf = self;
和
__weak typeof(self) tmpSelf = self;
这里完全一样吗?
我在文档中找到了另一段:
注意:在垃圾回收环境中,如果您将
__weak
和__block
修饰符同时应用于一个变量,则该块不会确保该变量保持存活。
所以,我完全被困惑了。
__block _weak NSString *strEg;
? - CyberMew