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

标签 objective-c ios memory-management automatic-ref-counting

仅 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/

相关文章:

objective-c - ios "Data Loading"透明背景通知

ios - 碰撞检测不起作用?

ios - 使用 NSManagedObjectContextWillSaveNotification 识别已更改对象的旧值和新值

ios - 如何检查 UIView 的背景颜色是否为 clearColor?

ios - 无法分配给参数

c - 用C写一个内存管理函数?

ios - 在 Objective C (iOS) 的多步清理中延迟 [super dealloc] 调用?

ios - BAD_EXC_ACCESS 用于在释放时尝试加载 View Controller

java - 有什么方法可以处理 "flush"字符串吗?

c++ - 关于 C++/程序集数据布局、数据成员访问、方法的一般问题