iOS開發(fā)是否應該使用ARC?
和身邊做iOS開發(fā)的同事組建了一個QQ群,每隔一段時間,大家就會討論是否應該使用ARC。所以我覺得有必要將這些討論分享出來,讓大家消除對于ARC的疑慮。
關于ARC的介紹文章網上已經很多,蘋果的官方文檔也不少。擔心使用ARC會帶來問題的同學主要的理由有以下5點:
1.擔心這個技術方案不靠譜。蘋果大多數(shù)時候的技術方案都是比較靠譜的,但也有一些技術方案有很多坑,例如storyboard。關于storyboard的問題可以參看我的這篇文章。
2.原有的項目在非ARC環(huán)境下運行良好,擔心遷移成本或引入新的問題。
3.蘋果以前手工管理內存需要非常小心,稍微不注意應用程序就崩潰了。有過這段經歷的iOS開發(fā)老手,心里上還是覺得自己手工管理內存更踏實一些。
4.使用ARC需要了解ARC的一些細節(jié),還需要引入_bridge等新的關鍵字,學習成本還是有的。
5.以為ARC只能支持iOS5.0以上(這是非常大的誤解)。
對于上面提到5點問題,我認為相應的回答如下:
1.ARC是WWDC2011大會時提出的技術,離現(xiàn)在已經快2年了,而且蘋果現(xiàn)在將MacOS上的垃圾回收機制廢棄(Deprecated),采用ARC替代,無疑證明了ARC是成熟的了。
2.確實有一些遷移成本,但蘋果在Xcode中專門集成了遷移工具,成本已經非常小了。如下圖就是Xcode集成的將非ARC工程轉換成ARC工程的工具。另外,為了兼容第三方的非ARC開源庫,你也可以在工程中隨意使用編譯參數(shù):-fno-objc-arc ,這個參數(shù)允許對部分文件關閉ARC。
3.手工管理內存雖然踏實,但是泄露很容易發(fā)生。常常開發(fā)完成后,需要使用Instruments來檢測泄露。但用了ARC后,基本不會出現(xiàn)泄露了,我在 開發(fā)粉筆網iPhone客戶端時,由于使用了ARC,花三個月開發(fā)完的應用,用instruments檢測后,沒有發(fā)現(xiàn)任何內存泄漏問題。這在沒有使用 ARC的工程中是不可想象的。
4.確實有學習成本。但是非常值得學習,能省不少開發(fā)精力。
5.雖然ARC是與iOS5一同推出,但是由于ARC的實現(xiàn)機制是在編譯期完成,所以使用ARC之后App仍然可以支持iOS4.3。稍微需要注意的是, 如果要在ARC開啟的情況下支持iOS4.3,需要將weak關鍵字換成 __unsafe_unretained,另外還有一些細節(jié)需要處理,在這里我就不展開說了。

所以,希望大家都能在項目中使用ARC,一旦你感受到它帶來的好處,你就離不開它了。它也能讓你從繁瑣的內存管理代碼中解放出來,將精力更多關注于代碼結構、設計模式而不是底層的內存管理。