UITableView的性能優(yōu)化歸根結(jié)底就是平衡GPU跟CPU的負載均衡,主要優(yōu)化途徑包括
1.利用蘋果提供的cell重用機制。
2.不要在 cellForRowAtIndexPath: 方法綁定數(shù)據(jù),因為這時 cell 還沒顯示,而是使用 UITableViews 的委托方法 tableView:willDisplayCell:forRowAtIndexPath:。
3.緩存cell的高度,分為兩種情況:1.當(dāng)cell的高度都是一樣的時候,直接給tablview設(shè)置rowheight 2.當(dāng)cell高度不固定的 時候,在綁定model的時候,就把cell的高度計算出來,作為model的一個屬性進行緩存。
4.復(fù)雜的cell盡量不適用autolayout,改用frame。因為autolayout會損耗一部分計算性能。
5.減少子view的數(shù)量跟層級。子view的層級越深,渲染到屏幕上的計算量也就越大
6.對于不透明的view,設(shè)置opaque為YES,在繪制這個view的時候就不需要考慮view覆蓋的情況
7.UIView的drawRect方法中使用CoreGraphic來進行CPU的渲染,減少對于GPU的負載。也就是減少cell中UIView,UIImageView,UILabel的使用。
8.cell layer的shouldRasterize要設(shè)置為YES
9.cell中的圖片使用異步加載策略,防止卡住主線程
10.盡量少用不透明的圖層,也就是說吧圖層的alpha設(shè)置為1
11.盡量不要用addsubview給cell動態(tài)的添加view,可以在初始化的時候添加,但是通過hidden屬性來控制是否顯示
12.盡量使用大小一致的圖片,也就是為了防止由于大小不一致造成的圖片縮放的開銷。
13.設(shè)置mask,shadows,opacity,antialiasing會觸發(fā)離屏渲染,因此要避免使用這些屬性。還有設(shè)置圖片的圓角也會觸發(fā)離屏渲染,所以可以考慮把繪制操作放在后臺線程中執(zhí)行,繪制完成之后回到主線程進行操作。如果需要在cell中使用上面的屬性,可以加上下面兩行代碼:
self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [UIScreen mainScreen].scale;
14.盡量創(chuàng)建一種類型的cell,可以傳入不同的cell類型進行區(qū)分,從而創(chuàng)建出不同樣式的cell。