這可能是一個愚蠢的問題,但我只是想知道。我希望我的代碼通過編程檢測ARC是否啓用。我怎麼做?是否有任何我可以檢查的標誌?其實問題是,我寫了一個開源庫。我在其中使用了release
和retain
。如果其他人使用我的庫文件使用ARC啓用,我不希望他們得到任何錯誤。我如何實現這一目標?或者是否有任何可能的方法可以在使用之前提供任何工具來編譯我的庫?如何以編程方式檢測自動引用計數?
回答
#if !__has_feature(objc_arc)
//Do manual memory management...
#else
//Usually do nothing...
#endif
這當然是一個編譯時檢查,你不能在運行時檢查ARC。
另一種方法是在項目中使用手動內存管理的文件的-fno-objc-arc
編譯器標誌設置爲否則使用ARC。
無論您是想要打擾這一切,還是僅僅使用ARC,都取決於您希望/需要如何向後兼容。支持ARC和MRC的代碼可能很難閱讀和維護。
您不會以編程方式檢測到它,它會根據翻譯進行操作。也就是說,它是而不是就像垃圾收集 - 它是全過程的,要求所有鏈接庫支持(並在該模式下正確實施)。你可以用ARC編譯一些文件,有些則不用。
但是,您可以detect it at compilation。
至於你的庫的分佈:我不會打擾基於翻譯的系統,其中有條件地啓用ref ref操作。我個人只會支持一個模型(MRC,直到你選擇將它遷移到ARC),然後期望人們鏈接到庫,或者如果他們在他們配置的目標中編譯它,則禁用ARC。根據特徵的存在條件啓用/禁用代碼是要求嚴重的錯誤,特別是當它可能影響庫的9%的代碼行時。
同意。人們可以爲自己的源文件禁用ARC,或者只分發可以正常工作的.a文件。我猜你仍然可以在編譯時使用#error來警告用戶他們需要爲源文件禁用ARC。 –
@MikeWeller作爲xcodeproj的源代碼分發也很容易(當它是一個選項時)。一個明確的'#error'在高層''include'是一個很好的接觸,但是這個問題在這種情況下會很快出現(因爲它是MRC)。如果它*需要* ARC OTOH,則應將高級別的#錯誤視爲一項要求(如果靜態分析儀的警告不足以提示,或者客戶端未使用該設施)。 – justin
NO,你不能,Xcode中也不會在ARC項目編譯如果您的源使用挽留釋放
- 1. 以編程方式檢測類參數
- 2. 如何以編程方式檢索msmq統計計數器?
- 3. Eclipse PDE:如何以編程方式檢測自動構建過程
- 4. 以編程方式檢測自動回覆電子郵件
- 5. 以編程方式檢測VMWare
- 6. Freeswitch以編程方式檢測傳真
- 7. 以編程方式檢測SQL Server版
- 8. 如何在android中以編程方式禁用耳機檢測?
- 9. 如何檢索以編程方式定義的視圖引用
- 10. Windows計劃任務,以編程方式檢測失敗
- 11. 如果磁盤脫機,如何以編程方式檢測[c#]?
- 12. Magento - 以編程方式禁用自動索引
- 13. 如何以編程方式檢查NSMicrophoneUsageDescription
- 14. Android如何以編程方式啓用/禁用自動同步
- 15. 如何以編程方式檢測Windows內的雙引導(特別是Linux)?
- 16. 如何以函數式編程的方式實現計數器
- 17. 如何以編程方式檢測計算機是否位於局域網內?
- 18. 如何以編程方式檢測屏幕撕裂?
- 19. 如何以編程方式檢測ASP.NET 3.5?
- 20. 如何以編程方式檢測html版本
- 21. 如何在Android中以編程方式檢測死鎖?
- 22. 在Revit中如何以編程方式進行干擾檢測?
- 23. 如何以編程方式檢測Mac OS X Server Edition?
- 24. 如何以編程方式檢測VB.NET混淆?
- 25. 如何以編程方式檢測圖像的背景?
- 26. 如何以編程方式檢測背光在iOS上?
- 27. 如何以編程方式檢測iPhone中的聽筒?
- 28. UIPickerView - 如何檢測以編程方式更改的值?
- 29. 如何以編程方式檢測iphone中的傳入郵件?
- 30. 如何以編程方式檢測系統熱鍵?
Xcode和ARC將不允許您使用retain og版本,並給您提供錯誤。 – Martol1ni
@DhilipSiva請不要在發佈問題前查看所有語法錯誤,找準路線。在發佈前請閱讀http://stackoverflow.com/faq#etiquette。 – Beginner