3

假设weak类似于assignor unsafe_unretained,除了weak当它指向的对象被dealloc'ed 时,变量被“归零”。但是 ARC 是由编译器处理的,那为什么weakiOS 4 和 Mac OS X 10.6 不支持呢?

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

4

3 回答 3

4

由于__weak需要在当前对象以外的地方清零一个或多个指针,因此需要额外的数据结构来跟踪弱引用。这与不需要额外跟踪的__strong__unsafe_unretained和形成对比。__autoreleasing跟踪结构和操作它们的程序内置在操作系统中;编译器插入代码来执行调用,但需要操作系统支持才能使编译后的代码工作。

于 2012-09-12T10:43:16.330 回答
2

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

于 2012-09-12T10:42:09.960 回答
1

10.6 不支持弱引用没有技术原因,而且确实至少有一个第三方实现可用(例如这个)。Apple 决定支持 ARC,但没有弱引用。我怀疑任何知道Apple做出该选择的实际原因的人都可以将其发布在stackoverflow上……所以您所能做的就是推测。

于 2012-09-12T11:03:42.450 回答