为什么ARC仅适用于iOS 4.0+?

Toa*_*tor 9 memory-management objective-c ios automatic-ref-counting

ARC仅受iOS 4.0及更高版本支持的技术原因是什么?

我的理解是它是一个编译器功能,它只是自动插入与内存管理相关的代码,而不是要求开发人员这样做.根据我的阅读,调用本身保持不变 - 至少这是苹果过渡到ARC指南所暗示的.

因此,它不应该包含以前版本的iOS中没有出现的功能,尽管稍后介绍过,ARC确实可以与iOS 4.0一起使用.

我出于好奇而问这个问题,实际上并不需要让ARC与iOS 3.x一起工作.

Bra*_*son 16

出于同样的原因,自动引用计数仅支持64位Snow Leopard作为最低部署目标:ARC支持要求某些功能仅出现在现代运行时的足够新版本中.现代运行时是在iOS 4.0中引入的,因此较旧的iOS版本缺乏运行时能够处理ARC技术上所需的一些事情.如果只是键入操作系统版本,也会支持32位Snow Leopard应用程序,但只有64位运行时才是现代的.

如果您观看来自WWDC 2011的 Apple演示文稿,特别是"Objective-C Advancements In Depth",您会看到已经进行了许多改进,以加快保留/发布过程,以及比较快的事情@autoreleasepool.LLVM ARC规范中有关于运行时支持的整个部分.这些改进不仅需要编译器支持.

我们已经不得不使用现代运行时来实现自动合成实例变量等功能(如Apple的文档中所述),所以这不是一个可怕的惊喜.

即使iOS 4.0作为目标也缺乏对弱引用的支持,因此这里有明显的技术问题.这不仅仅是推动开发人员使用新版本的营销策略,正如其他人所声称的那样.

  • @CRD - 也许您应该阅读上面的Apple文档,其中指出:"Mac OS X v10.5及更高版本的iPhone应用程序和64位程序使用现代版本的运行时.其他程序(Mac OS上的32位程序) X桌面)使用遗留版本的运行时." 这不是关于x86-64与i386,而是关于运行时功能.正如我所提到的,每个操作系统附带的运行时版本之间存在技术差异,为了支持ARC,需要足够新的运行时版本.将较新的运行时向后移植到较旧的OS版本是不可行的. (4认同)