为了这:
self.block = ^ { self.view.backgroundColor = [UIColor greenColor];};显然有一个保留周期。
但是,如果self属于以下类型,则没有保留周期:
__weak typeof(…
typeof 它不是一个函数,它是一个关键字,根本不在运行时使用。所有 __strong typeof(self) 在这里做的是告诉编译器如何评估符号 strongSelf 。它不会导致生成任何运行时代码,因为在运行时它实际上是什么类型并不重要。所有这些决定都是在编译时完成的。
typeof
__strong typeof(self)
strongSelf
这与定义某些内容相同 int x; 运行时不会以任何方式引用“int”。它只是一种C型。
int x;
typeof 从技术上讲是C扩展,但是在gcc兼容模式下,Clang支持它作为关键字,这是默认设置。有关扩展的更多信息,请参阅 GCC文档 。