2012-05-22 34 views
2

這可能是一個愚蠢的問題,但我只是想知道。我希望我的代碼通過編程檢測ARC是否啓用。我怎麼做?是否有任何我可以檢查的標誌?其實問題是,我寫了一個開源庫。我在其中使用了releaseretain。如果其他人使用我的庫文件使用ARC啓用,我不希望他們得到任何錯誤。我如何實現這一目標?或者是否有任何可能的方法可以在使用之前提供任何工具來編譯我的庫?如何以編程方式檢測自動引用計數?

+0

Xcode和ARC將不允許您使用retain og版本,並給您提供錯誤。 – Martol1ni

+0

@DhilipSiva請不要在發佈問題前查看所有語法錯誤,找準路線。在發佈前請閱讀http://stackoverflow.com/faq#etiquette。 – Beginner

回答

18
#if !__has_feature(objc_arc) 
    //Do manual memory management... 
#else 
    //Usually do nothing... 
#endif 

這當然是一個編譯時檢查,你不能在運行時檢查ARC。

另一種方法是在項目中使用手動內存管理的文件的-fno-objc-arc編譯器標誌設置爲否則使用ARC。

無論您是想要打擾這一切,還是僅僅使用ARC,都取決於您希望/需要如何向後兼容。支持ARC和MRC的代碼可能很難閱讀和維護。

2

您不會以編程方式檢測到它,它會根據翻譯進行操作。也就是說,它是而不是就像垃圾收集 - 它是全過程的,要求所有鏈接庫支持(並在該模式下正確實施)。你可以用ARC編譯一些文件,有些則不用。

但是,您可以detect it at compilation

至於你的庫的分佈:我不會打擾基於翻譯的系統,其中有條件地啓用ref ref操作。我個人只會支持一個模型(MRC,直到你選擇將它遷移到ARC),然後期望人們鏈接到庫,或者如果他們在他們配置的目標中編譯它,則禁用ARC。根據特徵的存在條件啓用/禁用代碼是要求嚴重的錯誤,特別是當它可能影響庫的9%的代碼行時。

+0

同意。人們可以爲自己的源文件禁用ARC,或者只分發可以正常工作的.a文件。我猜你仍然可以在編譯時使用#error來警告用戶他們需要爲源文件禁用ARC。 –

+0

@MikeWeller作爲xcodeproj的源代碼分發也很容易(當它是一個選項時)。一個明確的'#error'在高層''include'是一個很好的接觸,但是這個問題在這種情況下會很快出現(因爲它是MRC)。如果它*需要* ARC OTOH,則應將高級別的#錯誤視爲一項要求(如果靜態分析儀的警告不足以提示,或者客戶端未使用該設施)。 – justin

1

NO,你不能,Xcode中也不會在ARC項目編譯如果您的源使用挽留釋放

相關問題