iOS开发是否应该使用ARC?

iOS开发是否应该使用ARC?

和身边做iOS开发的同事组建了一个QQ群,每隔一段时间,大家就会讨论是否应该使用ARC。所以我觉得有必要将这些讨论分享出来,让大家消除对于ARC的疑虑。

关于ARC的介绍文章网上已经很多,苹果的官方文档也不少。担心使用ARC会带来问题的同学主要的理由有以下5点:

1.担心这个技术方案不靠谱。苹果大多数时候的技术方案都是比较靠谱的,但也有一些技术方案有很多坑,例如storyboard。关于storyboard的问题可以参看我的这篇文章。


2.原有的项目在非ARC环境下运行良好,担心迁移成本或引入新的问题。


3.苹果以前手工管理内存需要非常小心,稍微不注意应用程序就崩溃了。有过这段经历的iOS开发老手,心里上还是觉得自己手工管理内存更踏实一些。


4.使用ARC需要了解ARC的一些细节,还需要引入_bridge等新的关键字,学习成本还是有的。


5.以为ARC只能支持iOS5.0以上(这是非常大的误解)。


对于上面提到5点问题,我认为相应的回答如下:

1.ARC是WWDC2011大会时提出的技术,离现在已经快2年了,而且苹果现在将MacOS上的垃圾回收机制废弃(Deprecated),采用ARC替代,无疑证明了ARC是成熟的了。


2.确实有一些迁移成本,但苹果在Xcode中专门集成了迁移工具,成本已经非常小了。如下图就是Xcode集成的将非ARC工程转换成ARC工程的工具。另外,为了兼容第三方的非ARC开源库,你也可以在工程中随意使用编译参数:-fno-objc-arc,这个参数允许对部分文件关闭ARC。


3.手工管理内存虽然踏实,但是泄露很容易发生。常常开发完成后,需要使用Instruments来检测泄露。但用了ARC后,基本不会出现泄露了,我在开发粉笔网iPhone客户端时,由于使用了ARC,花三个月开发完的应用,用instruments检测后,没有发现任何内存泄漏问题。这在没有使用ARC的工程中是不可想象的。


4.确实有学习成本。但是非常值得学习,能省不少开发精力。


5.虽然ARC是与iOS5一同推出,但是由于ARC的实现机制是在编译期完成,所以使用ARC之后App仍然可以支持iOS4.3。稍微需要注意的是,如果要在ARC开启的情况下支持iOS4.3,需要将weak关键字换成 __unsafe_unretained,另外还有一些细节需要处理,在这里我就不展开说了。

所以,希望大家都能在项目中使用ARC,一旦你感受到它带来的好处,你就离不开它了。它也能让你从繁琐的内存管理代码中解放出来,将精力更多关注于代码结构、设计模式而不是底层的内存管理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值