欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂ios培訓(xùn)之ios開發(fā)高級(jí)工程師企業(yè)應(yīng)用ARC

2016-08-17 14:50:55 1638瀏覽

        ARC可以簡(jiǎn)化代碼并增強(qiáng)應(yīng)用程序的穩(wěn)定性,它已經(jīng)成為今后蘋果iOS開發(fā)的必然趨勢(shì),越來(lái)越多的項(xiàng)目包括一些第三方庫(kù)都已經(jīng)采用了ARC。蘋果公司鼓勵(lì)開發(fā)者們使用ARC,AER已經(jīng)成為iOS開發(fā)工程師必備技術(shù)職能,但問(wèn)題并不在于程序員們不想使用ARC——如果0C從一開始就使用ARC事情反倒好辦了,但事實(shí)并不是這樣。問(wèn)題在于,以前的代碼如何工作在ARC模式F,即非ARC代碼如何遷移到ARC?有些代碼,比如一些第三方的庫(kù),并不是一開始就支持ARC,而要將這些龐大的第三方庫(kù)都重構(gòu)為ARC代碼,仍然是一個(gè)長(zhǎng)期和富有挑戰(zhàn)性的工作。






        因此,由于歷史的原因,“ARC”和“非ARC”代碼混用的情況仍將在一段時(shí)間內(nèi)繼續(xù)存在。代碼混用的情況一般分為以下兩種。


        第一,非ARC項(xiàng)目重構(gòu)為ARC項(xiàng)目,其中有部分代碼保持非ARC。


        例如,讀者手中有一些老的項(xiàng)目(ARC),需要將它們重構(gòu)為ARC項(xiàng)目(使用Xcode的重構(gòu)refactoring功能),但其中又有部分代碼不能重構(gòu)(比如一些非ARC的第三方庫(kù),轉(zhuǎn)換起來(lái)比較麻煩或者會(huì)導(dǎo)致各種各樣莫名其妙的問(wèn)題)


        第二,在ARC項(xiàng)目中添加非ARC的代碼。


        比如,有一個(gè)ARC的項(xiàng)目,讀者想導(dǎo)入一些非ARC的代碼到這個(gè)項(xiàng)目中,這些非ARC的代碼暫時(shí)不想轉(zhuǎn)換為ARC。


        不論是上述哪一種情況,都需要項(xiàng)目能在混合模式下(ARC”與“非ARC”代碼)運(yùn)行。


        1、ARC項(xiàng)目重構(gòu)為ARC項(xiàng)目,其中有部分代碼保持非ARC


        (1)打開非ARC的項(xiàng)目。在aroject設(shè)置面板選擇target,在Build Settings中將“Compiler forCC++0biectiveC”設(shè)為“Apple LLVM compiler 30”或以上。因?yàn)?/span>ARC只能用Clang進(jìn)行編譯。


         (2)還是在Build Settings找到“Objective。C Automatic Reference Counting”,將值改成YES。此時(shí)如果編譯,編譯器會(huì)警告無(wú)數(shù)的錯(cuò)誤,暫時(shí)不用管它。


        (3)單擊菜單“EditRefactor---Convert to ObjectiveC ARC”,在“Select Targets To Convert”界面選擇target,單擊目標(biāo)名旁邊的小箭頭,以展開文件列表。


        (4)單擊右鍵或【ctrl+左鍵】選擇所有不想重構(gòu)的文件,如下圖所示。


 

        (5)單擊【Precheck按鈕進(jìn)行重構(gòu)。如果一切正常,則可以進(jìn)行編譯了。


        在此列出一些在轉(zhuǎn)換時(shí)可能出現(xiàn)的問(wèn)題,當(dāng)然在使用ARC時(shí)也需要注意在代碼中避免這些問(wèn)題:


        ·Castrequires a bridged cast...


        ARC“免費(fèi)橋接”中出現(xiàn)的問(wèn)題。關(guān)于“免費(fèi)橋接”84節(jié)會(huì)進(jìn)行詳細(xì)介紹。


        ·Receiver typeXfor instance message is a forward declaration


        前置聲明問(wèn)題。如果在ARC中調(diào)用某個(gè)子類的方法,而該方法是繼承自父類-中的方法(未進(jìn)行覆蓋),則必須導(dǎo)入父類的頭文件,否則無(wú)法編譯。


        ·Switch case is in protected scope


        現(xiàn)在switch語(yǔ)句必須加上{}了,ARC需要知道局部變量的作用域,加上{Jswitch語(yǔ)法更加嚴(yán)格,否則遇到?jīng)]有break的分支的話內(nèi)存管理會(huì)出現(xiàn)問(wèn)題。


        ·A name is referenced outside the NSAutoreleasePool scope that it was declared in


        在非ARC代碼中使用了autoreleasepool,轉(zhuǎn)換為ARC代碼中則變?yōu)?/span>@autoreleasepool塊,但原來(lái)pool中聲明的變量在新的@autoreIeaseDool塊中作用域?qū)⒈幌拗茷榫植?。將變量聲明?/span>pool之外即可。


        ·ARC forbids ObjectiveC objects in structs or unions


        ARC禁止在C結(jié)構(gòu)體中放入0C對(duì)象。ARC對(duì)于結(jié)構(gòu)體和0C對(duì)象指針采用完全不同的處理方式。因?yàn)榫幾g器根本不知道一個(gè)結(jié)構(gòu)體何時(shí)被copy、何時(shí)被destroy,也找不到地方去插入retainrelease語(yǔ)句,而且將對(duì)象指針?lè)诺浇Y(jié)構(gòu)中也不是很常見的行為,所以ARC完全放棄了對(duì)結(jié)構(gòu)體的管理。如果程序員想將0c對(duì)象指針?lè)诺浇Y(jié)構(gòu)體中,必須用unsafe unretained進(jìn)行修飾,并自己負(fù)責(zé)對(duì)該對(duì)象的內(nèi)存管理以及解決因此產(chǎn)生的一。切問(wèn)題。切記,通常不應(yīng)該把OC指針?lè)湃虢Y(jié)構(gòu)體中,如果非要這樣做,最好將結(jié)構(gòu)體改變?yōu)檩p量級(jí)的OC類。


        2、ARC項(xiàng)目中添加非ARC的代碼


        打開ARC項(xiàng)目,轉(zhuǎn)到target的“Build Phases”窗口。


        將某個(gè).m文件(不想ARC)compiler flags標(biāo)志修改為-fno-obj-arc(單擊該文件旁邊的compiler flags欄,然后輸入.fnoobjcarc)。這個(gè)標(biāo)志將顯示在文件右邊,如下圖所示。


 


        這樣,編譯器就會(huì)知道凡是帶有這個(gè)標(biāo)志的文件都不需要ARC編譯。



 查看更多關(guān)于“iOS培訓(xùn)資訊”的相關(guān)文章>>

標(biāo)簽: iOS開發(fā)培訓(xùn) iOS開發(fā)在線培訓(xùn) iOS培訓(xùn)視頻 Android開發(fā)培訓(xùn)

熱門專區(qū)

暫無(wú)熱門資訊

課程推薦

微信
微博
15311698296

全國(guó)免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠(chéng)科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部