2011-12-04 204 views
8

我有一個與ARC代碼和非ARC代碼的應用程序。當我嘗試將非ARC代碼編譯爲ARC時,編譯器會捕獲。當我的ARC代碼在沒有ARC的情況下被錯誤編譯時,如何導致編譯時錯誤/注意事項?顯然,代碼將被編譯。它只會泄漏。靜態分析器將會發現問題。我寧願找到一種方法在我的ARC代碼中留下編譯指示或定義。如何在課堂上要求ARC?

以下是蘋果在objc-api.h定義:

/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */ 
#if !defined(OBJC_ARC_UNAVAILABLE) 
# if __has_feature(objc_arr) 
#  define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) 
# else 
#  define OBJC_ARC_UNAVAILABLE 
# endif 
#endif 

我的C-宏觀福較弱。我將如何使用它?或者,也許有一個更好的符號來檢查?

P.S.我問,因爲我從可重用的庫中構建了大部分應用程序。我想確保每個文件都以正確的方式編譯。

回答

9

下面應該工作:

#if !__has_feature(objc_arc) 
# error Compile me with ARC, please! 
#endif 

將其放置在你的文件的頂部。

+0

謝謝您的宏。 – adonoho

-1

如果它是一個完整的文件,我建議在編譯器標誌中加入-fno-objc-arc以使用非弧編譯器。

使用宏編譯非弧編譯器的「部分」代碼。 例如,如果您正在編寫將用於弧和非弧代碼庫並寫入發佈,在此宏塊內釋放的框架,請使用此代碼

+0

作爲現代的Xcode v4.2 +,Mugunth允許在項目中混合使用ARC和非ARC代碼,並且ARC支持應用程序回到iOS v4.0,所以我寧願避免使用宏路由,只需將文件移動到ARC中即可我添加了新的功能。關鍵是要確保此更改傳播,因爲我和我的客戶端的應用程序的新版本已加速。上面的宏是這樣做的。感謝您的評論,思想和時間。安德魯 – adonoho