下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】iOS優(yōu)化內(nèi)存,提升性能之四
在UI中顯示和隱藏view在UI中顯示和隱藏view,需要用到的內(nèi)存操作很少。但是,這個和iOSapp的性能和用戶體驗有關(guān)。當(dāng)view顯示或隱藏時,在viewcontroller中有4個主要的方法來表示view的不同狀態(tài)?!靨iewWillAppear:在view顯示之前會調(diào)用這個方法。只有這個方法調(diào)用完之后,才會顯示你的view。為了給應(yīng)用創(chuàng)造一個很好的用戶體驗,在這里做的計算最好要非常的快。否則,用戶會感覺你的導(dǎo)航和動畫比較弱。一個好的做法是設(shè)置view的屬性(例如,背景色或文本顏色)。例如,用戶按下返回按鈕返回到viewA。但是,在viewA的viewDidAppear方法內(nèi)部,有一個耗時的計算。這個計算結(jié)果可能會花幾秒鐘,但是同時UI線程會被阻塞來處理viewA的內(nèi)部邏輯,同時viewA也無法顯示。viewDidAppear:在view顯示之后,這個方法會被調(diào)用,所以你可以把你的邏輯處理放在這里。但是,如果在它執(zhí)行完后,你的處理過程會改變view,用戶可能會感到迷惑,這不是一個好的用戶體驗。例如,你有一個排序算法來對你的tableview進(jìn)行排序。當(dāng)用戶看到viewA時,舊的table還在顯示。然后突然所有的的rows發(fā)生了變化,而沒有任何的警告或是解釋發(fā)生了什么事情。viewDidDisappear:在view從UI消失之前會調(diào)用這個方法。任何屬于這個view的,你想要顯示給用戶的,都應(yīng)該放在這里。注意在這里你不應(yīng)該放置太多邏輯處理的代碼。如果你在這里放了很多的邏輯處理代碼,那么顯示一個新的view就會花很多時間。沒有什么硬性規(guī)則說你應(yīng)該把邏輯處理過程放在什么地方。我向你介紹了所有的基本的概念,你可以使用他們創(chuàng)建比較好的用戶體驗和性能。對象拷貝你為什么需要知道對象拷貝以及為什么需要它呢?拷貝一個對象是非常有用的,如果你不想改變舊的對象,因為它可能影響到其他部分程序。在某些情況下,你根本不能修改對象,所以你只能拷貝這個對象的內(nèi)容,然后再進(jìn)行修改。淺拷貝和深拷貝在Objective-C中,淺拷貝實際上和retaining是一樣的。因為淺拷貝是拷貝一個對象的指針到一個新的變量中,在淺拷貝和retaining之間是沒有什么不同的。另一方面,深拷貝意味著你會實際創(chuàng)建一個新的對象,然后從舊的對象中拷貝所有的數(shù)據(jù)和實例變量到新的對象中。為了演示淺拷貝和深拷貝在Objective-C之間的不同,考慮下面的代碼:Shallowcopying:-(void)setMyObj:(NSObject*)newObj{
if(newObj!=myObj){
myObj=newObj;
}}Deepcopying:-(void)setMyObj:(NSObject*)newObj{
if(newObj!=myObj){
myObj=[newObjcopy];
}}在第一種情況下,你把變量的值賦值給一個新的對象然后retain這個對象。在Objective-C中,這就是淺拷貝。在深拷貝例子中,代碼實際上拷貝了newObj的值和實例變量到myObj。實現(xiàn)一個深拷貝如果你確實需要一個深拷貝,你必須了解對象的整個層次結(jié)構(gòu)。你需要創(chuàng)建一個新的對象。把舊對象的所有的實例變量拷貝到新對象中。如果實例變量是基本數(shù)據(jù)類型,比如float,int或double,你只需要拷貝他們的值。Boolean不是基本類型,但是你也只需要拷貝它的值即可。對于每一個指針類型的實例變量,你同樣要拷貝它們的實例變量。這個過程需要一直持續(xù),直到結(jié)束。這個過程可能很長,而且很難實現(xiàn)。一些內(nèi)置的對象和庫不支持深拷貝。因此,你需要在淺拷貝和深拷貝之間進(jìn)行比較。例如,你不想深拷貝一個delegate,像前面介紹的,它會導(dǎo)致循環(huán)引用,即對象A擁有對象B,對象B擁有對象A。更進(jìn)一步的,你通常不應(yīng)該拷貝你的delegate,因為你最終只是想要回調(diào)它,而不是創(chuàng)建它。這是一個混合了淺拷貝和深拷貝的例子:@interfaceItem:NSObject{NSString*itemName;CGFloatprice;iddelegate;}@property(nonatomic,copy)NSString*itemName;@property(nonatomic,weak)CGFloatprice;@property(nonatomic,weak)iddelegate;@end在這個例子中,你可以看到有3個實例變量。第一個是itemName(這是一個指針對象),第二個是一個基本數(shù)據(jù)類型,第三個是一個delegate。如圖7-8,delegate對象在原始的item和新的item中將保持一樣。itemName對象將會被拷貝,有一個新的內(nèi)存地址(0x9124代替了0x8028),但是都有同樣的值“egg”。對于基本數(shù)據(jù)類型,例如price,將會被拷貝,它沒有內(nèi)存地址。在對象中實現(xiàn)copy方法為了實現(xiàn)對象的深拷貝,你通常需要重寫copyWithZone:方法。當(dāng)向一個對象發(fā)送copy消息,這個方法會被調(diào)用。這里有一些重寫這個方法的代碼。你需要用alloc和init創(chuàng)建一個新的對象,然后使用set方法給實例變量設(shè)值。-(id)copyWithZone:(NSZone*)zone{
Item*copy=[[ItemallocWithZone:zone]initWithName:self.itemName];
copy.price=self.price;
copy.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度專業(yè)演出場地租賃及活動策劃服務(wù)協(xié)議3篇
- 2025年度碼頭貨物短途運輸及環(huán)保處理服務(wù)合同4篇
- 2024-2025學(xué)年高中歷史第五單元近現(xiàn)代中國的先進(jìn)思想第20課西學(xué)東漸課后習(xí)題含解析岳麓版必修3
- 二零二五版生態(tài)修復(fù)工程承攬合同模板-施工與生態(tài)保護(hù)2篇
- 2025年度門衛(wèi)人員安全教育與聘用合同
- 2024版派遣員工合同樣本2篇
- 2025版高端商務(wù)辦公空間租賃合同4篇
- 2024碼頭場地租賃合同
- 2024版天然氣安全運輸合同
- 2024鐵路旅客運輸服務(wù)質(zhì)量監(jiān)督合同3篇
- 運輸供應(yīng)商年度評價表
- 機(jī)械點檢員職業(yè)技能知識考試題庫與答案(900題)
- 成熙高級英語聽力腳本
- 北京語言大學(xué)保衛(wèi)處管理崗位工作人員招考聘用【共500題附答案解析】模擬試卷
- 肺癌的診治指南課件
- 人教版七年級下冊數(shù)學(xué)全冊完整版課件
- 商場裝修改造施工組織設(shè)計
- (中職)Dreamweaver-CC網(wǎng)頁設(shè)計與制作(3版)電子課件(完整版)
- 統(tǒng)編版一年級語文上冊 第5單元教材解讀 PPT
- 加減乘除混合運算600題直接打印
- ASCO7000系列GROUP5控制盤使用手冊
評論
0/150
提交評論