仅 iOS 4.0 及以上版本支持 ARC 的技术原因是什么?
据我了解,它是一个编译器特性,它只是自动插入内存管理相关代码,而不需要开发人员这样做。从我读到的内容来看,电话本身保持不变——至少苹果是这样的Transitioning to ARC Guide暗示。
因此,它不应涉及以前版本的 iOS 中不存在的功能,事实上,ARC 确实适用于 iOS 4.0,尽管后来引入了。
我问这个问题是出于好奇,实际上并不需要让 ARC 与 iOS 3.x 一起工作。
最佳答案
出于同样的原因,自动引用计数仅支持将 64 位 Snow Leopard 作为最低部署目标:ARC 支持需要某些功能仅在足够新的现代运行时版本中存在。现代运行时是在 iOS 4.0 中引入的,因此较旧的 iOS 版本缺少能够处理 ARC 技术上所需的某些事情的运行时。如果它只针对操作系统版本,那么 32 位 Snow Leopard 应用程序也将受到支持,但只有 64 位运行时才是现代的。
如果您观看来自 WWDC 2011 的 Apple 演示,特别是“Objective-C Advancements In-Depth”,您会看到已经进行了许多底层改进以加快保留/释放过程,以及更快的 @自动释放池
。 LLVM ARC specification 中有一整节是关于运行时支持的.这些改进需要的不仅仅是编译器支持。
我们已经不得不使用现代运行时来实现实例变量的自动合成等功能(如 Apple's documentation 中所述),所以这并不是一个可怕的惊喜。
即使作为目标的 iOS 4.0 也缺乏对弱引用的支持,因此这里显然存在技术问题。正如其他人所断言的那样,这不仅仅是一种将开发人员推向更新版本的营销策略。
关于objective-c - 为什么 ARC 仅适用于 iOS 4.0+?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581447/