关于 iOS5 SDK 中自动参考文献计数的几个问题

我目前正在开发一个 iPad 应用程序。IOS 4.2的开发已经开始,现在正在继续(我认为将会完成)。 我刚刚在 iOS5中读到了 ARC,基本上我明白了我们再也不需要释放和保留对象了。我的问题是:

  1. 如果我决定升级到 iOS5,是否需要从代码中删除所有 [myObject retain][myObject release]语句?

  2. 如果我使用 ARC 为 iOS5开发一个新的应用程序,我是否需要实现某种“复古兼容性”检查?例如: 我是否需要检查 iOS 的版本并相应地调用保留和释放?那么,基本上 ARC 是适用于所有的 iOS 版本,还是只适用于 iOS5?

55440 次浏览

据我所知,就我的 iPhone/iPod 分别运行 iOS5和 iOS4.3而言,它们都是相当自动化的。我在 iOS 5.0上开始使用的一个应用程序已经“更新”为 Xcode,它从来没有对我的发布和保留发出任何警告,即使它遍布每一个 dealloc,等等。然而,我在一个新的项目 被创造出来中插入(复制文件)的一些代码(Xcode for iOS5)有很多很多的警告。所以看起来你不需要删除所有这些调用,而且不管怎样,它会自动适应旧版本。对我的 iPod 进行分析,我没有看到内存泄漏或其他释放/释放失败的迹象。这有帮助吗?

如果我决定升级到 iOS5,我会吗 需要删除所有[ myObject 保留] 和[ myObject release ]语句 我的密码

是的,但是 XCode 4.2包含了一个新的“迁移到 Objective-C ARC”工具(在 Edit-> Refactor 菜单中) ,它可以为您完成这项工作。打电话给 deloc 就是另一回事了。正如注释中提到的,clang 引用指出您应该保留您的 deloc 方法:

基本原理: 即使 ARC 自动销毁实例变量,仍然有合法的理由编写一个 dealloc 方法,例如释放不可保留的资源。在这样的方法中未能调用[ super deloc ]几乎总是一个 bug。

您可以使用 new-fobc-ARC 启用 ARC 编译器标志 Xcode 4.2 for Mac OS X v10.6 and v10.7 (64位应用程序)和 iOS4 以及 iOS5 支持 Mac OS X v10.6和 iOS 4)在 Xcode 没有 ARC 的支持 4.1.

-

如果我为 iOS5开发一个新的应用程序 ARC 我需要实现一些 复古兼容性检查? 我需要检查一下版本 和通话保留和释放 那么,基本上 ARC 就是 适用于所有 iOS 版本 对于 iOS 5

不,因为 ARC 在编译时而不是在运行时发挥它的魔力。

而不是让你记得 使用保留、释放及 自动发布,ARC 评估 对象的生存期要求 并自动插入 适当的方法调用 编译时间。编译器也 生成适当的 deloc 方法 为了你。

关于 ARC 的进一步信息: http://clang.llvm.org/docs/AutomaticReferenceCounting.html

关于你问题的这一部分

如果我使用 ARC 为 iOS5开发一个新的应用程序,我需要实现 - 某种“复古兼容性”检查?-也就是说,我需要检查 IOS 的版本和呼叫保留和相应的释放? 那么, 基本上,ARC 是适用于所有 iOS 版本还是仅适用于 iOS5?

值得注意的是,iOS 5编译器采用了“复古兼容性”(它实际上添加了使保留/发布工作的代码,本质上) ,但如果你不是为 iOS 5.0编译,你不能使用 weak作为一个关键字。而是使用 assign。这是不幸的: weak是一个巨大的优势(没有悬空指针,永远!).关于 weakassign和 ARC 的讨论见我的问题 给你

如果您可以通过不使用 new-fobc-ARC 编译器标志来禁用 ARC,那么您就不必向前重写代码-我猜(?)

Q1: 不,如果你有一个现有的代码,你可以继续使用它与 - fno-objecc-Arc一样,你可以选择性地禁用任何文件的 ARC。

如果你想 很多文件上的 关闭中心:

  1. 在 Xcode 的目标/构建阶段/编译源选择所需的文件
  2. 按回车 (双击只选择一个文件)
  3. 类型 - fno-objecc-Arc
  4. 进来成交

问题2: 不,目标可以低至 iOS 4.0