为什么启用ARC的平台无法支持弱引用?

9da*_*dan 1 xcode pointers objective-c automatic-ref-counting

我现在重读"过渡到ARC发行说明".

一开始,它说

Xcode 4.2支持OS for OS X v10.6和v10.7(64位应用程序)以及iOS 4和iOS 5.OS X v10.6和iOS 4不支持弱引用.

为什么是这样?实施弱引用是否需要深入平台/ OS支持?

我想,弱引用并不那么特别(考虑到C++原始指针的用法).

这可能不是技术原因吗?(弱参考支持被删除,因为它失败了几个测试用例并且没有足够的时间?)

Tom*_*mmy 5

弱引用是自我归零的.它们被设置为nil在指向的对象开始之前dealloc,任何尝试将处于释放中的对象分配给weak引用都会引发异常.因此,运行时需要能够存储添加映射:从对象到对该对象的任何弱引用.iOS 4没有实现该表.

它们和C++之间的主要实现区别在于weak_ptr没有转换步骤,因为转换为a shared_ptr.该nilING推,拉不.引用只能作为常规指针加载到机器级别.

必须扩展Objective-C运行时来处理这个问题的部分原因是Objective-C对象通常不能存在于堆栈中.因此,自动跟踪它们需要编译器和运行时之间更大的共谋.与STL不同,您不会看到ARC首先作为第三方解决方案出现.

在实践中,它只是一些未实现的额外C调用.编译器支持到位,如果你真的想要并支持iOS 4及更早版本的弱引用,你可以自己实现它们.迈克阿什做了.苹果公司的决定很可能与其对落后支持开发技术的一般态度有关:它宁愿每个人都使用最新的技术.