Answers:
如果我决定升级到iOS 5,是否需要从我的代码中删除所有[myObject keep]和[myObject release]语句?
是的,但是XCode 4.2包括一个新的“迁移到Objective-C ARC”工具(在“编辑”->“重构”菜单中),该工具可以为您完成此工作。调用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版本并相应地调用“保留并释放”吗?因此,基本上,ARC是否适用于所有iOS版本或仅适用于iOS 5?
不可以,因为ARC是在编译时而不是运行时发挥作用的。
ARC无需评估何时使用保留,释放和自动释放功能,而是可以评估对象的生存期要求,并在编译时自动为您插入适当的方法调用。编译器还会为您生成适当的dealloc方法。
有关ARC的更多信息:http : //clang.llvm.org/docs/AutomaticReferenceCounting.html
dealloc
,只需删除所有,release
然后[super dealloc]
从中删除所有。99.9%的dealloc
对象只是释放对象,因此将其删除。但是对象仍然必须执行其他清理任务release
(关闭文件,删除观察者等)。
据我了解,以及我分别运行iOS 5和iOS 4.3的iPhone / iPod都能正常运行,这都是完全自动化的。我从4.0开始并已“更新”为与iOS 5.0的Xcode一起使用的应用程序,即使遍及每个dealloc等等,也从未对我发布和保留它的方式发出任何警告。但是,我插入的某些相同代码(将文件复制)到使用Xcode为iOS 5 创建的新项目中,会有很多警告。因此,您似乎不必删除所有这些调用,并且不,它会以某种方式自动适应旧版本。对我的iPod进行性能分析时,我看不到内存泄漏或其他无法解除分配/释放的迹象。这有帮助吗?