IOS ARC 和 非ARC

IOS ARC 和 非ARC 之間的轉(zhuǎn)換方法:

1,選擇項(xiàng)目中的Targets,選中你所要操作的Target,
2,選Build Phases,在其中Complie Sources中選擇需要ARC的文件雙擊,
并在輸入框中輸入:-fobjc-arc,如果不要ARC則輸入:-fno-objc-arc

iOS- 如何將非ARC的項(xiàng)目轉(zhuǎn)換成ARC項(xiàng)目(實(shí)戰(zhàn))

1.前言

因?yàn)楣居袀€(gè)國外餐飲系統(tǒng),編程開發(fā)了3-4年,之前用的都是非ARC,開發(fā)到今年,第一批迭代開發(fā)的人員早已不見,目前發(fā)現(xiàn)了有許多的內(nèi)存泄露之類的,系統(tǒng)沒有自動釋放該釋放的內(nèi)存。一旦app長時(shí)間使用,內(nèi)存沒有得到釋放,最后導(dǎo)致app閃崩。涉及到的地方特別多,特別繁雜。故我有了打算將此項(xiàng)目完全轉(zhuǎn)換稱arc項(xiàng)目的意向。經(jīng)過1個(gè)星期的轉(zhuǎn)換與1個(gè)星期的測試,成功將非arc項(xiàng)目轉(zhuǎn)換稱arc項(xiàng)目。

因?yàn)楹苌僬业接泄緦⒋笮屠蟖pp進(jìn)行arc轉(zhuǎn)換,所以網(wǎng)上這方面的資料都特別少。

經(jīng)過這次嘗試,我證明了是可行的。

現(xiàn)在就在博客里總結(jié)一下我遇到的一些問題。

畢竟ARC是objc未來。

Xcode 自帶一個(gè)自動轉(zhuǎn)換的功能,不過只適合比較小的項(xiàng)目,在大型項(xiàng)目上是不適合適用的,所以我這里是全手動轉(zhuǎn)換。

2.將項(xiàng)目編譯環(huán)境改成arc

將紅圈處從No 改成Yes

image

如果你現(xiàn)在的工程不支持ARC技術(shù),你可以通過一個(gè)自動轉(zhuǎn)換工具來轉(zhuǎn)換你的工程(

工具在Edit>Refactor>Convertto Objective-C ARC

),這個(gè)工具會自動所有工程中手動管理內(nèi)存的點(diǎn)轉(zhuǎn)換成合適自動方式的(比如移除retain, release等)。這個(gè)工具會轉(zhuǎn)換工程中所有的文件。當(dāng)然你可以轉(zhuǎn)換單個(gè)文件。

3.下面的這些函數(shù):dealloc,retain, release, retainCount, autorelease。禁止任何形式調(diào)用和實(shí)現(xiàn)(dealloc可能會被實(shí)現(xiàn))

將這些內(nèi)存管理的東西全部刪掉或注釋

image
image

4.不能使用

NSAutoreleasePool

.可以考慮直接注釋

作為替代,@autoreleasepool被引入,你可以使用這個(gè)效率更高的關(guān)鍵詞。

image

5.在做橋接轉(zhuǎn)換時(shí)報(bào)錯(cuò),用xcode提示替換

image

6.ARC語法的一些規(guī)則

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

6.2.不重載dealloc(如果是釋放對象內(nèi)存以外的處理,是可以重載該函數(shù)的,但是不能調(diào)用[super dealloc])

6.3.不能使用NSAllocateObject, NSDeallocateObject

6.4.不能在C結(jié)構(gòu)體中使用對象指針

6.5.id與void *間的如果cast時(shí)需要用特定的方法(__bridge關(guān)鍵字)

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

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

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

我們項(xiàng)目里可能引用了許多第三方框架。

大部分都是用一些宏來讓代碼可以同時(shí)適應(yīng)arc和非arc的

(用#if __has_feature(objc_arc)判斷)

。如果代碼量不大,可以考慮自己進(jìn)行改寫

你可以按上面的步驟將第三方框架自己手動改稱arc

如果是大型框架的話,可以采取標(biāo)記此框架保留非arc的環(huán)境不變,繼續(xù)使用。

1,選擇項(xiàng)目中的Targets,選中你所要操作的Target,

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容