如何將非ARC的項目轉換成ARC項目

來源:互聯網
上載者:User

如何將非ARC的項目轉換成ARC項目

   如何將非ARC的項目轉換成ARC項目

  Xcode 內建一個自動轉換的功能,不過只適合比較小的項目,在大型項目上是不適合適用的,所以大型項目上需要全手動轉換。

  1.將項目編譯環境改成ARC

  將紅圈處從No 改成Yes

  如果你現在的工程不支援ARC技術,你可以通過一個自動轉換工具來轉換你的工程(工具在 Edit>Refactor>Convertto Objective-CARC),這個工具會自動所有工程中手動管理記憶體的點轉換成合適自動方式的(比如移除retain, release等)。這個工具會轉換工程中所有的檔案。當然你可以轉換單個檔案。

  2.這些函數:dealloc,retain,release,retainCount,autorelease。禁止任何形式調用和實現(dealloc可能會被實現)

  將這些記憶體管理的東西全部刪掉或注釋

  3.不能使用NSAutoreleasePool。可以考慮直接注釋

  作為替代,@autoreleasepool被引入,你可以使用這個效率更高的關鍵詞。

  4.在做橋接轉換時報錯,用xcode提示替換

  5.ARC文法的一些規則

  5.1.代碼中不能使用retain, release, retain, autorelease

  5.2.不重載dealloc(如果是釋放對象記憶體以外的處理,是可以重載該函數的,但是不能調用[super dealloc])

  5.3.不能使用NSAllocateObject, NSDeallocateObject

  5.4.不能在C結構體中使用對象指標

  5.5.id與void *間的如果cast時需要用特定的方法(__bridge關鍵字)

  5.6.不能使用NSAutoReleasePool、而需要@autoreleasepool塊

  5.7.不能使用“new”開始的屬性名稱(如果使用會有下面的編譯錯誤”Property’s synthesized getter followsCocoa naming convention for returning ‘owned’ objects”)

  7.第三方包的問題,第三方架構的問題

  我們項目裡可能引用了許多第三方架構。

  大部分都是用一些宏來讓代碼可以同時適應ARC和非ARC的(用#if __has_feature(objc_ARC)判斷)。如果代碼量不大,可以考慮自己進行改寫.

  你可以按上面的步驟將第三方架構自己手動改成ARC。

  如果是大型架構的話,可以採取標記此架構保留非ARC的環境不變,繼續使用。

  1,選擇項目中的Targets,選中你所要操作的Target,

  2,選Build Phases,在其中Complie Sources中選擇需要ARC的檔案雙擊,並在輸入框中輸入:-fobjc-ARC,如果不要ARC則輸入:-fno-objc-ARC

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.