接上一篇翻譯的內(nèi)容。
創(chuàng)新互聯(lián)擁有一支富有激情的企業(yè)網(wǎng)站制作團隊,在互聯(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)站維護!再次運行測試
在重用cell之后,你可以再一次測試滾動性能。從表格3-3可以看出,在你正確重用cell之后,性能提升了一倍。
表格 3-3 重用cell之后測試的結(jié)果
結(jié)果顯示你的做法是正確的;但是,現(xiàn)在的性能依然不夠好。你總是想讓性能上升至0.6666-0.0001左右;對于一個標準的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進行重用,無論這個cell是否在屏幕之外。如果你重用cell,OS就不需要創(chuàng)建一個新的cell來顯示;它只需要獲取舊的cell,改變一些屬性,然后重新顯示這個cell。這個過程比OS創(chuàng)建一個新的cell要快的多。
重用圖片
顯示圖片的主要問題在于加載的時間,要么通過文件系統(tǒng)IO,要么通過網(wǎng)絡(luò)IO,都是非常耗時的。這個加載過程同樣會影響到滾動性能,當iOS不能返回cell來渲染UI時。
由于這個原因,請參考ReuseImageViewController這個給工程。首先我解釋一下在這些例子中,我為什么沒有使用[UIImage p_w_picpathd:@""]。p_w_picpathNamed做了一項非常重要的工作:它會在內(nèi)存中緩存圖片,當你再次訪問的時候會重用它。使用這個方法的問題是它只能從bundle中獲取文件 --- 換句話說,圖片只能和app的源代碼放在一起。通常,你必須調(diào)用方法[UIImage alloc] initWithContentsOfFile:@""];或者[UIImage alloc] initWithData:data]]。調(diào)用這些方法,OS不會自動的在內(nèi)存中緩存圖片。
所以,我希望你通過一個小的dictionary在內(nèi)存中存儲圖片,來自己緩存圖片(請看第4章)。另外一個圖片處理非常重要的部分是多線程(請看第6章)。使用這個技術(shù),你可以把耗時的的處理任務(wù)放到當前線程之外。在我的當前例子中,不會使用多線程,因為你必須立即了解很多新的概念。在本章結(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ù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。