据说weak
与assign
或unsafe_unretained
类似,只是weak
变量在其指向的对象为dealloc
时被“归零”编辑。但ARC由编译器处理,那么为什么iOS 4和Mac OS X 10.6不支持weak
?
(对于这个问题,请不要作为答案给出猜测,但事实/参考/文档更支持的内容)
答案 0 :(得分:4)
由于__weak
要求在当前对象以外的位置清零一个或多个指针,因此需要其他数据结构来跟踪弱引用。这与__strong
,__unsafe_unretained
和__autoreleasing
形成对比,后者不需要额外跟踪。用于操纵它们的跟踪结构和程序被内置到OS中;编译器插入代码来执行调用,但操作系统支持需要在那里,以便编译的代码能够工作。
答案 1 :(得分:2)
__weak
引用需要运行时支持,这在较旧的iOS版本上不可用。
答案 2 :(得分:1)
10.6无法支持弱引用没有技术原因,实际上至少有一个第三方实现可用(例如this one)。 Apple决定支持ARC,但没有弱引用。我怀疑任何知道Apple做出选择的实际原因的人都可以在stackoverflow上发布...所以你所能做的只是推测。