如何優化tableView

以前問到如何優化複雜UITableViewCell卡頓的問題, 有位大佬發了下面的一段文字, 在此記錄一下web

  • 1.cell 的行高不是固定值,須要計算,則要儘量緩存行高值,避免重複計算行高。由於 heightForRowAtIndexPath:是調用最頻繁的方法。緩存

  • 2.滑動時按需加載,這個在大量圖片展現,網絡加載的時候很管用!(SDWebImage 已經實現異 步加載,配合這條性能槓槓的)。網絡

  • 3.正確使用 reuseIdentifier 來重用 Cells異步

  • 4.儘可能少用或不用透明圖層性能

  • 5.若是 Cell 內現實的內容來自 web,使用異步加載,緩存請求結果優化

  • 6.減小 subviews 的數量線程

  • 7.在 heightForRowAtIndexPath:中儘可能不使用 cellForRowAtIndexPath:,若是你須要用到它, 只用一次而後緩存結果code

  • 8.全部的子視圖都預先建立,若是不須要顯示能夠設置 hidden,儘可能少動態給 Cell 添加 View生命週期

  • 9.顏色不要使用 alph圖片

  • 10.柵格化

  • 11.cellsubViews 的各級 opaque 值要設成 YES,儘可能不要包含透明的子 View opaque 用於輔助繪圖系統,表示 UIView 是否透明。在不透明的狀況下,渲染視圖時須要快速 地渲染,以提􏰀高性能。渲染最慢的操做之一是混合(blending)。提􏰀高性能的方法是減小混合操 做的次數,其實就是 GPU 的不合理使用,這是硬件來完成的(混合操做由 GPU 來執行,由於這 個硬件就是用來作混合操做的,固然不僅是混合)。 優化混合操做的關鍵點是在平衡 CPUGPU 的負載。還有就是 celllayershouldRasterize 要設成 YES

  • 12.cell 異步加載圖片以及緩存

  • 13.異步繪製

    • (1)在繪製字符串時,儘量使用 drawAtPoint: withFont:,而不要使用更復雜的 drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode; 若是要繪製過長的字符串,建議本身先截 斷,而後使用 drawAtPoint: withFont:方法繪製。

    • (2)在繪製圖片時,儘可能使用 drawAtPoint,而不要使用 drawInRectdrawInRect 若是在繪 制過程當中對圖片進行放縮,會特別消耗 CPU

    • (3)其實,最快的繪製就是你不要作任何繪製。有時經過 UIGraphicsBeginImageContextWithOptions() 或者 CGBitmapContextCeate() 建立位圖會顯 得更有意義,從位圖上面抓取圖像,並設置爲 CALayer 的內容。 若是你必須實現 -drawRect:,而且你必須繪製大量的東西,這將佔用時間。

    • (4)若是繪製 cell 過程當中,須要下載 cell 中的圖片,建議在繪製 cell 一段時間後再開啓圖 片下載任務。譬如先畫一個默認圖片,而後在 0.5S 後開始下載本 cell 的圖片。

    • (5)即便下載 cell 圖片是在子線程中進行,在繪製 cell 過程當中,也不能開啓過多的子線程。 最好只有一個下載圖片的子線程在活動。不然也會影響 UITableViewCell 的繪製,於是影響了 UITableViewCell 的滑動速度。(建議結合使用 NSOpeartionNSOperationQueue 來下載圖片, 若是想盡量找的下載圖片,能夠把[self.queuesetMaxConcurrentOperationCount:4];)

    • (6)最好本身寫一個 cache,用來緩存 UITableView 中的 UITableViewCell,這樣在整個 UITableView 的生命週期裏,一個 cell 只需繪製一次,而且若是發生內存不足,也能夠有效的 釋放掉緩存的 cell

  • 14.不要將 tableview 的背景顏色設置成一個圖片。這回嚴重影響 UITableView 的滑動速度。在 限時免費搜索裏,我曾經翻過一個錯誤:self.tableView_.backgroundColor = [UIColorcolorWithPatternImage:[UIImageimageNamed:@"background.png"]]; 經過這種方式 設置 UITableView 的背景顏色會嚴重影響 UTIableView 的滑動流暢性。修改爲 self.tableView_.backgroundColor = [UIColor clearColor];以後,fps43 上升到 60 左右。 滑動比較流暢。

相關文章
相關標籤/搜索