以前問到如何優化複雜
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.cell
的 subViews
的各級 opaque
值要設成 YES,儘可能不要包含透明的子 View
opaque
用於輔助繪圖系統,表示 UIView
是否透明。在不透明的狀況下,渲染視圖時須要快速 地渲染,以提高性能。渲染最慢的操做之一是混合(blending
)。提高性能的方法是減小混合操 做的次數,其實就是 GPU
的不合理使用,這是硬件來完成的(混合操做由 GPU
來執行,由於這 個硬件就是用來作混合操做的,固然不僅是混合)。 優化混合操做的關鍵點是在平衡 CPU
和 GPU
的負載。還有就是 cell
的 layer
的 shouldRasterize
要設成 YES
。
12.cell
異步加載圖片以及緩存
13.異步繪製
(1)在繪製字符串時,儘量使用 drawAtPoint: withFont:
,而不要使用更復雜的 drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode
; 若是要繪製過長的字符串,建議本身先截 斷,而後使用 drawAtPoint: withFont:
方法繪製。
(2)在繪製圖片時,儘可能使用 drawAtPoint
,而不要使用 drawInRect
。drawInRect
若是在繪 制過程當中對圖片進行放縮,會特別消耗 CPU
。
(3)其實,最快的繪製就是你不要作任何繪製。有時經過 UIGraphicsBeginImageContextWithOptions()
或者 CGBitmapContextCeate()
建立位圖會顯 得更有意義,從位圖上面抓取圖像,並設置爲 CALayer
的內容。 若是你必須實現 -drawRect:
,而且你必須繪製大量的東西,這將佔用時間。
(4)若是繪製 cell
過程當中,須要下載 cell
中的圖片,建議在繪製 cell
一段時間後再開啓圖 片下載任務。譬如先畫一個默認圖片,而後在 0.5S 後開始下載本 cell
的圖片。
(5)即便下載 cell
圖片是在子線程中進行,在繪製 cell
過程當中,也不能開啓過多的子線程。 最好只有一個下載圖片的子線程在活動。不然也會影響 UITableViewCell
的繪製,於是影響了 UITableViewCell
的滑動速度。(建議結合使用 NSOpeartion
和 NSOperationQueue
來下載圖片, 若是想盡量找的下載圖片,能夠把[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];
以後,fps
從 43
上升到 60
左右。 滑動比較流暢。