如果ARC由编译器处理,为什么iOS 4和Mac OS X 10.6上不支持弱?

时间:2012-09-12 10:39:57

标签: objective-c ios automatic-ref-counting

据说weakassignunsafe_unretained类似,只是weak变量在其指向的对象为dealloc时被“归零”编辑。但ARC由编译器处理,那么为什么iOS 4和Mac OS X 10.6不支持weak

(对于这个问题,请不要作为答案给出猜测,但事实/参考/文档更支持的内容)

3 个答案:

答案 0 :(得分:4)

由于__weak要求在当前对象以外的位置清零一个或多个指针,因此需要其他数据结构来跟踪弱引用。这与__strong__unsafe_unretained__autoreleasing形成对比,后者不需要额外跟踪。用于操纵它们的跟踪结构和程序被内置到OS中;编译器插入代码来执行调用,但操作系统支持需要在那里,以便编译的代码能够工作。

答案 1 :(得分:2)

__weak引用需要运行时支持,这在较旧的iOS版本上不可用。

答案 2 :(得分:1)

10.6无法支持弱引用没有技术原因,实际上至少有一个第三方实现可用(例如this one)。 Apple决定支持ARC,但没有弱引用。我怀疑任何知道Apple做出选择的实际原因的人都可以在stackoverflow上发布...所以你所能做的只是推测。