下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】iOS優(yōu)化內(nèi)存,提升性能之二
自動(dòng)引用計(jì)數(shù)上面的那樣處理過程,使得問題變得更加復(fù)雜,因?yàn)槟憧偸且涀?nèi)存管理的規(guī)則,你需要知道什么時(shí)候在代碼中加入retain,release,或者autorelease。因此,在新版Xcode(Xcode4.2),蘋果發(fā)布了一個(gè)新的機(jī)制,使得retain,release,和autorelease自動(dòng)執(zhí)行。上面所有的策略依然可以應(yīng)用在新版本的代碼中。但是Xcode會(huì)為你添加內(nèi)存管理需要的代碼。為了給你一個(gè)快速的了解,我重新編寫Listing7.1和Listing7.2代碼。Listing7.4.RewriteCodefortheNewARCmechanismForListing7.1:-(void)doSomething{
NSObject*obj=[[NSObjectalloc]init];
NSLog(@"obj:%@",obj);}ForListing7.3:-(NSObject*)getObj{
NSObject*obj=[[NSObjectalloc]init];
returnobj;}就是這樣!不在需要release或autorelease。當(dāng)你編譯代碼的時(shí)候,Xcode會(huì)自動(dòng)的為你添加release/autorelease相關(guān)代碼。在編譯器添加這些調(diào)用后,代碼就和Listing7.1和Listing7.3一樣了。如何在Xcode中設(shè)置你的工程?進(jìn)入你的工程的settings,查找Objective-CAutomaticReferenceCounting是否設(shè)置為YES。你可以在圖7-2的看到設(shè)置行的位置:如果有一個(gè)已經(jīng)使用了retain/release/autorelease的工程,你可以使用Xcode的migration工具來刪除這些不需要的代碼,如圖7-3。ARC策略你需要遵守一些新的規(guī)則來確保你的工程兼容ARC:你不能使用或調(diào)用舊的內(nèi)存管理方法:retain,release,autorelease和retainCount。你可以復(fù)寫dealloc方法做任何你需要清理的工作,但是你不能調(diào)用dealloc方法,例如[superdealloc]是不允許的。
在構(gòu)建屬性的時(shí)候,這個(gè)規(guī)則也是強(qiáng)制要求的:@property(nonatomic,retain)NSString*myName;//這是不允許的在c中不能使用對象指針,這會(huì)導(dǎo)致很多問題,如果你想在你的工程中集成c代碼,如第9章所描述。你不能使用NSAutoreleasePool對象,必須使用@autoreleasepool。
不能使用:
NSAutoreleasePool*myPool=[[NSAutoreleasePoolalloc]init];//yourcodehere[poolrelease];
必須使用:@autoreleasepool{//yourcodehere}ARC新的修飾符根據(jù)新的ARC策略,你現(xiàn)在需要包含新的生命周期的修飾符來運(yùn)用新的ARC規(guī)則。strong:這個(gè)表示你想保持一個(gè)變量的強(qiáng)引用。只要有對象A的一個(gè)強(qiáng)引用,對象A就不會(huì)deallocated。weak:這個(gè)和assign類似,如果你只是想要保持一個(gè)對象的引用,而又不想顯示的擁有它。因此,你不需要管理這個(gè)對象的生命周期。一個(gè)比較好的情況是:如果對象A有對象B的一個(gè)弱引用,如果對象B被deallocated,那么這個(gè)引用會(huì)變成nil。這樣是比較安全的,因?yàn)槟悴粫?huì)擁有一個(gè)已經(jīng)deallocated對象的引用。unsafe_unretained:這個(gè)和weak類似,他們的不同之處是:對象A有對象B的一個(gè)引用,如果對象B被deallocated了,那么對象A的引用就會(huì)指向一個(gè)deallocated對象,這樣會(huì)導(dǎo)致應(yīng)用程序崩潰。autoreleaseing:如果你有一個(gè)方法需要引用傳遞的參數(shù),你可以考慮這個(gè)修飾符。當(dāng)返回的時(shí)候,方法會(huì)負(fù)責(zé)autorelease這個(gè)參數(shù)。對象屬性現(xiàn)在,你需要改變對象屬性的聲明。不要在使用之前版本的舊的內(nèi)存管理機(jī)制:@property(retain)NSString*myString,現(xiàn)在有一個(gè)新的規(guī)則。如果你想擁有一個(gè)對象的所有權(quán)//Thisissimilarto@property(retain)NSString*myString@property(strong)NSString*myString;如果你只是要持有一個(gè)對象的引用,而不是它的所有權(quán)//Thisissimilarto@property(assign)UIViewController*myViewController;//exceptthatifmyViewControllerobjectisdeallocated,//thereferencebecomesnil.@property(weak)UIViewController*myString;注意:如果你想要你的應(yīng)用運(yùn)行在iOS4,你不能使用weak。你需要使用unsafe_unretained然后自己設(shè)置引用為nil。變量聲明為了在方法內(nèi)部使用這些修飾符,你需要在它的前面添加__(兩個(gè)下劃線)。例如,你可以使用__strong或__weak。在方法中,__strong是默認(rèn)的修飾符。使用__strong修飾符能確保你的對象一直存在直到方法結(jié)束,同時(shí)要小心使用__weak或__unsafe_unretained。如果沒有強(qiáng)引用指向你的對象,你的對象會(huì)立即崩潰。例如:NSString__weak*myString=@"helloworld";NSLog(@"myString:%@",myString);將會(huì)打印(null),因?yàn)樵诖蛴r(shí),已經(jīng)沒有強(qiáng)引用指向它。__autoreleasing修飾符用來給方法接收一個(gè)引用傳遞的參數(shù)。-(BOOL)performTaskWithError:(NSError*__autoreleasing*)error;你可以正常的調(diào)用它:NSError*error=nil;[selfperformTaskWithEr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建師范大學(xué)《小學(xué)班隊(duì)原理與班主任工作》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《體育保健學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《數(shù)字化教育資源設(shè)計(jì)與制作》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《設(shè)計(jì)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《景觀設(shè)計(jì)四》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《環(huán)境工程學(xué)科概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)《公共管理應(yīng)用寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 智慧產(chǎn)業(yè)園區(qū)發(fā)展、運(yùn)營及實(shí)踐
- 虛擬現(xiàn)實(shí)調(diào)研報(bào)告
- 2024屆深圳市重點(diǎn)中學(xué)高三5月階段質(zhì)量檢測試題數(shù)學(xué)試題
- 幼兒園《電從哪里來》教案
- 二年級上冊連續(xù)加減括號(hào)混合豎式計(jì)算180題
- 空調(diào)投標(biāo)書(范本)
- 第四單元課文復(fù)習(xí)(課件)部編版語文五年級上冊
- 決議公開范文(推薦十九篇)
- 助產(chǎn)士的溝通技巧課件
- 國際理解教育教案
- 健美操訓(xùn)練計(jì)劃
- 深基坑安全管理(安全培訓(xùn))課件
- 領(lǐng)導(dǎo)力與團(tuán)隊(duì)管理課件
評論
0/150
提交評論