因?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)目。
Xcode 自帶一個(gè)自動(dòng)轉(zhuǎn)換的功能,不過只適合比較小的項(xiàng)目,在大型項(xiàng)目上是不適合適用的,所以我這里是全手動(dòng)轉(zhuǎn)換。
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