有关iOS5 SDK中自动引用计数的一些问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我目前正在为iPad开发一款应用程序。iOS 4.2的开发工作已经开始,现在正在继续(我认为将会完成)iOS 4.3。我刚刚在iOS 5中阅读了关于ARC的内容,基本上我明白我们将永远不需要释放和保留对象了。我的问题是:

  1. 如果我决定升级到iOS 5,我是否需要从我的代码中删除所有[myObject retain][myObject release]语句?
  2. 如果我使用ARC开发iOS 5的新应用程序,我是否需要实施某种“复古兼容性”检查?即:我是否需要检查iOS的版本并相应地调用retain和release?那么,基本上,ARC是否适用于所有iOS版本或仅适用于iOS 5?
提问于
用户回答回答于

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

是的,但是XCode 4.2包含一个新的“迁移到Objective-C ARC”工具(在Edit-> Refactor菜单中),它可以帮助你。调用dealloc是一个不同的故事。正如评论中提到的那样,clang参考指出你应该保留你的dealloc方法:

理由:即使ARC自动销毁实例变量,仍然有合法的理由来编写dealloc方法,例如释放不可保留的资源。没有在这种方法中调用[super dealloc]几乎总是一个错误。

您可以使用新的-fobjc-arc编译器标志来启用ARC。对于Mac OS X v10.6和v10.7(64位应用程序)以及iOS 4和iOS 5,Xcode 4.2支持ARC。(弱引用在Mac OS X v10.6和iOS 4中不受支持)。Xcode 4.1没有ARC支持。

-

如果我使用ARC开发iOS 5的新应用程序,我是否需要实施某种“复古兼容性”检查?即:我需要检查iOS的版本并相应地调用retain和release吗?那么,基本上,ARC是否适用于所有iOS版本或仅适用于iOS 5?

不,因为ARC在编译时并没有在运行时发挥它的魔力。

你不必记住何时使用retain,release和autorelease,ARC会评估对象的生命周期需求,并在编译时自动为你插入适当的方法调用。编译器也为你生成适当的dealloc方法。

用户回答回答于

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

如果你想在MULTIPLE文件上禁用ARC

  1. 在Xcode中的Target / Build Phases / Compile Sources中选择所需的文件
  2. 按回车。(双击只选择一个文件)
  3. 键入-fno-objc-arc
  4. Enter完成

Q2:不,目标可以低至iOS 4.0

扫码关注云+社区