UITableView性能提升和優(yōu)化(第3章)之二-創(chuàng)新互聯(lián)

接上一篇翻譯的內(nèi)容。

創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊,在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕10多年,專業(yè)且經(jīng)驗豐富。10多年網(wǎng)站優(yōu)化營銷經(jīng)驗,我們已為上1000家中小企業(yè)提供了成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)解決方案,定制網(wǎng)站建設(shè),設(shè)計滿意,售后服務(wù)無憂。所有客戶皆提供一年免費網(wǎng)站維護(hù)!

再次運行測試

在重用cell之后,你可以再一次測試滾動性能。從表格3-3可以看出,在你正確重用cell之后,性能提升了一倍。

UITableView性能提升和優(yōu)化(第3章) 之二

表格 3-3 重用cell之后測試的結(jié)果

結(jié)果顯示你的做法是正確的;但是,現(xiàn)在的性能依然不夠好。你總是想讓性能上升至0.6666-0.0001左右;對于一個標(biāo)準(zhǔn)的UITableViewCell這是一個正常的性能,就像在第一部分展示的那樣。所以下一部分將要學(xué)習(xí)如何重用p_w_picpaths,而不是每次調(diào)用的時候都創(chuàng)建一個新的p_w_picpath。

這就是你為什么要重用cell的原因。對于OS來說,創(chuàng)建和加載一個新的cell到內(nèi)存中,都是要花費時間和內(nèi)存資源的。這就是為什么tableview總是queue 一個cell進(jìn)行重用,無論這個cell是否在屏幕之外。如果你重用cell,OS就不需要創(chuàng)建一個新的cell來顯示;它只需要獲取舊的cell,改變一些屬性,然后重新顯示這個cell。這個過程比OS創(chuàng)建一個新的cell要快的多。

重用圖片

顯示圖片的主要問題在于加載的時間,要么通過文件系統(tǒng)IO,要么通過網(wǎng)絡(luò)IO,都是非常耗時的。這個加載過程同樣會影響到滾動性能,當(dāng)iOS不能返回cell來渲染UI時。

由于這個原因,請參考ReuseImageViewController這個給工程。首先我解釋一下在這些例子中,我為什么沒有使用[UIImage p_w_picpathd:@""]。p_w_picpathNamed做了一項非常重要的工作:它會在內(nèi)存中緩存圖片,當(dāng)你再次訪問的時候會重用它。使用這個方法的問題是它只能從bundle中獲取文件 --- 換句話說,圖片只能和app的源代碼放在一起。通常,你必須調(diào)用方法[UIImage alloc] initWithContentsOfFile:@""];或者[UIImage alloc] initWithData:data]]。調(diào)用這些方法,OS不會自動的在內(nèi)存中緩存圖片。

所以,我希望你通過一個小的dictionary在內(nèi)存中存儲圖片,來自己緩存圖片(請看第4章)。另外一個圖片處理非常重要的部分是多線程(請看第6章)。使用這個技術(shù),你可以把耗時的的處理任務(wù)放到當(dāng)前線程之外。在我的當(dāng)前例子中,不會使用多線程,因為你必須立即了解很多新的概念。在本章結(jié)束的時候,你應(yīng)該自己做完這個練習(xí)。

這是在NSDictionary緩存圖片的主要代碼(請不要使用這種方式存儲圖片,因為它會導(dǎo)致內(nèi)存警告)。

// Code to store the p_w_picpath in the dictionary- (UIImage *)p_w_picpathWithName:(NSString *)name {

if ([self.p_w_picpathDictionary objectForKey:name]) {return [self.p_w_picpathDictionary objectForKey:name];

}

UIImage *p_w_picpath = [[UIImage alloc] initWithContentsOfFile:name];[self.p_w_picpathDictionary     setObject:p_w_picpath forKey:name];
return p_w_picpath;

}

下面這個是提取最近一次圖片的主要代碼。

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  static NSString *CellIdentifier = @"CellIdentifier";

  ReuseTableViewCell *cell = (ReuseTableViewCell *) [selfgetCellWithTableView:tableView   cellIdentifier:CellIdentifier nibName:@"ReuseTableViewCell"];

  NSString *avatarFile = [NSString stringWithFormat:@"a0"];
  NSString *avatarName = [[NSBundle mainBundle] pathForResource:avatarFile ofType:@"jpeg"];

  cell.avatar.p_w_picpath = [self p_w_picpathWithName:avatarName];

  cell.userName.text = [NSString stringWithFormat:@"hi here: %d", indexPath.row];// Configure the cell.

  return cell;
}

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:UITableView性能提升和優(yōu)化(第3章)之二-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://muchs.cn/article40/djgceo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)ChatGPT、響應(yīng)式網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站營銷關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)