接上一篇翻譯的內容。

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

表格 3-3 重用cell之后測試的結果
結果顯示你的做法是正確的;但是,現在的性能依然不夠好。你總是想讓性能上升至0.6666-0.0001左右;對于一個標準的UITableViewCell這是一個正常的性能,就像在第一部分展示的那樣。所以下一部分將要學習如何重用p_w_picpaths,而不是每次調用的時候都創建一個新的p_w_picpath。
這就是你為什么要重用cell的原因。對于OS來說,創建和加載一個新的cell到內存中,都是要花費時間和內存資源的。這就是為什么tableview總是queue 一個cell進行重用,無論這個cell是否在屏幕之外。如果你重用cell,OS就不需要創建一個新的cell來顯示;它只需要獲取舊的cell,改變一些屬性,然后重新顯示這個cell。這個過程比OS創建一個新的cell要快的多。
重用圖片
顯示圖片的主要問題在于加載的時間,要么通過文件系統IO,要么通過網絡IO,都是非常耗時的。這個加載過程同樣會影響到滾動性能,當iOS不能返回cell來渲染UI時。
由于這個原因,請參考ReuseImageViewController這個給工程。首先我解釋一下在這些例子中,我為什么沒有使用[UIImage p_w_picpathd:@""]。p_w_picpathNamed做了一項非常重要的工作:它會在內存中緩存圖片,當你再次訪問的時候會重用它。使用這個方法的問題是它只能從bundle中獲取文件 --- 換句話說,圖片只能和app的源代碼放在一起。通常,你必須調用方法[UIImage alloc] initWithContentsOfFile:@""];或者[UIImage alloc] initWithData:data]]。調用這些方法,OS不會自動的在內存中緩存圖片。
所以,我希望你通過一個小的dictionary在內存中存儲圖片,來自己緩存圖片(請看第4章)。另外一個圖片處理非常重要的部分是多線程(請看第6章)。使用這個技術,你可以把耗時的的處理任務放到當前線程之外。在我的當前例子中,不會使用多線程,因為你必須立即了解很多新的概念。在本章結束的時候,你應該自己做完這個練習。
這是在NSDictionary緩存圖片的主要代碼(請不要使用這種方式存儲圖片,因為它會導致內存警告)。
// 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;
}
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網站名稱:UITableView性能提升和優化(第3章)之二-創新互聯
網頁URL:http://www.yijiale78.com/article40/djgceo.html
成都網站建設公司_創新互聯,為您提供移動網站建設、ChatGPT、響應式網站、網站導航、網站營銷、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯