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)沒有自動(dòng)釋放該釋放的內(nèi)存。一旦app長(zhǎng)時(shí)間使用,內(nèi)存沒有得到釋放,最后導(dǎo)致app閃崩。涉及到的地方特別多,特別繁雜。故我有了打算將此項(xiàng)目完全轉(zhuǎn)換稱arc項(xiàng)目的意向。經(jīng)過1個(gè)星期的轉(zhuǎn)換與1個(gè)星期的測(cè)試,成功將非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è)自動(dòng)轉(zhuǎn)換的功能,不過只適合比較小的項(xiàng)目,在大型項(xiàng)目上是不適合適用的,所以我這里是全手動(dòng)轉(zhuǎn)換。
2.將項(xiàng)目編譯環(huán)境改成arc
將紅圈處從No 改成Yes
如果你現(xiàn)在的工程不支持ARC技術(shù),你可以通過一個(gè)自動(dòng)轉(zhuǎn)換工具來轉(zhuǎn)換你的工程(
工具在Edit>Refactor>Convertto Objective-C ARC
),這個(gè)工具會(huì)自動(dòng)所有工程中手動(dòng)管理內(nèi)存的點(diǎn)轉(zhuǎn)換成合適自動(dòng)方式的(比如移除retain, release等)。這個(gè)工具會(huì)轉(zhuǎn)換工程中所有的文件。當(dāng)然你可以轉(zhuǎn)換單個(gè)文件。
3.下面的這些函數(shù):dealloc,retain, release, retainCount, autorelease。禁止任何形式調(diào)用和實(shí)現(xiàn)(dealloc可能會(huì)被實(shí)現(xiàn))
將這些內(nèi)存管理的東西全部刪掉或注釋
4.不能使用
NSAutoreleasePool
.可以考慮直接注釋
作為替代,@autoreleasepool被引入,你可以使用這個(gè)效率更高的關(guān)鍵詞。
5.在做橋接轉(zhuǎn)換時(shí)報(bào)錯(cuò),用xcode提示替換
6.ARC語法的一些規(guī)則
6.1.代碼中不能使用retain, release, retain, autorelease
6.2.不重載dealloc(如果是釋放對(duì)象內(nèi)存以外的處理,是可以重載該函數(shù)的,但是不能調(diào)用[super dealloc])
6.3.不能使用NSAllocateObject, NSDeallocateObject
6.4.不能在C結(jié)構(gòu)體中使用對(duì)象指針
6.5.id與void *間的如果cast時(shí)需要用特定的方法(__bridge關(guān)鍵字)
6.6.不能使用NSAutoReleasePool、而需要@autoreleasepool塊
6.7.不能使用“new”開始的屬性名稱 (如果使用會(huì)有下面的編譯錯(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)行改寫
你可以按上面的步驟將第三方框架自己手動(dòng)改稱arc
如果是大型框架的話,可以采取標(biāo)記此框架保留非arc的環(huán)境不變,繼續(xù)使用。
1,選擇項(xiàng)目中的Targets,選中你所要操作的Target,
2,選Build Phases,在其中Complie Sources中選擇需要ARC的文件雙擊,并在輸入框中輸入:-fobjc-arc,如果不要ARC則輸入:-fno-objc-arc