iOS: Disable Automatic Reference Counting for Some Files

Posted by – June 18, 2013

開發 iOS 所使用的 Objective-C 語言隨著 APP 生態發展,也變成一門挺熱門的語言。相對地,其發展也進步許多。

Apple 於 2011 年才在 Objective-C 中導入了 Automatic Reference Counting (ARC) 機制,做為自動記憶體管理的解決方案。在 ARC 出現之前,Obj-C 中記憶體釋放完全是由開發者操作的,對於慣用 script 語言的我來說相當的不習慣,而且也覺得很囉嗦。我偏好 PHP, Python, Ruby 這類可以寫得很簡潔,專注在我要解決的問題與需求上的語言。從 C 演化來的 Obj-C 宛如火星文一般。

所以我是很習慣在開 Xcode 專案時使用 ARC 機制的,可以不用寫 release 方便許多。我連 @synthesize 都沒在寫的。

前面扯這麼多,當然是在鋪 ARC 的梗。開發過程中常會用到第三方的 Library 或 Example code 來加速開發或完成某些外部資源串接。這些第三方的 code 有許多仍是用 non-ARC 模式開發的 (就是手動管理記憶體)。但是專案開了 ARC 模式後編譯 non-ARC code 會掛掉。

xcode-non-arc-error

解決方法是更改編譯設定。在 Xcode 點選 TARGETS -> Build Phases,在 Compile Source 可以加上編譯參數。為 non-ARC 的程式加上 -fno-objc-arc 指定不使用 ARC。

xcode-fno-objc-arc

這樣編譯可以過關了。

如果是反過來要在 non-ARC project 中指定使用 ARC 的話,參數是 -fobjc-arc

References:

Leave a Reply

Your email address will not be published. Required fields are marked *