Luk*_*e47 134 objective-c ios5 xcode4.2 automatic-ref-counting
我正在开发一款适用于iPad的应用程序.iOS 4.2开始开发,现在继续(我认为将完成)iOS 4.3.我刚刚阅读了iOS 5中的ARC,基本上我明白我们将永远不再需要发布和保留对象.我的问题是:
如果我决定升级到iOS 5,我是否需要从代码中删除所有[myObject retain]和[myObject release]语句?
如果我使用ARC开发适用于iOS 5的新应用程序,我是否需要实施某种"复古兼容性"检查?即:我需要检查iOS版本并相应地调用retain和release吗?那么,基本上,ARC适用于所有iOS版本还是适用于iOS 5?
Hen*_*sel 150
如果我决定升级到iOS 5,是否需要从我的代码中删除所有[myObject retain]和[myObject release]语句?
是的,但是XCode 4.2包含一个新的"迁移到Objective-C ARC"工具(在Edit-> Refactor菜单中),它可以为您完成.调用dealloc是一个不同的故事.正如评论中所提到的,clang引用声明你应该保留dealloc方法:
基本原理:即使ARC自动销毁实例变量,仍然有合理的理由编写dealloc方法,例如释放不可保留的资源.在这种方法中未能调用[super dealloc]几乎总是一个bug.
使用新的-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在编译时而不是在运行时发挥其魔力.
ARC不会记住何时使用保留,释放和自动释放,而是评估对象的生命周期要求,并在编译时自动为您插入适当的方法调用.编译器还会为您生成适当的dealloc方法.
有关ARC的更多信息:http://clang.llvm.org/docs/AutomaticReferenceCounting.html
Q1:NO,如果您有现有代码,可以继续使用-fno-objc-arc,可以选择性地禁用任何文件上的ARC.
如果要在MULTIPLE文件上禁用ARC:
Q2:不,目标可以低至iOS 4.0
据我所知,就运行iOS 5和iOS 4.3的iPhone/iPod而言,它们都非常自动化.我开始使用4.0并且已经"更新"以使用Xcode for iOS 5.0的应用程序永远不会抛出任何关于释放和保留的警告,即使它遍及每个dealloc等等.但是,我插入了一些相同的代码(复制文件)到用Xcode for iOS 5 创建的新项目中有很多很多警告.所以看起来你不必删除所有这些调用,不,它以某种方式自动适应旧版本.分析我的iPod,我看到没有内存泄漏或其他deallocs/release失败的迹象.这有帮助吗?