UITableView絲滑滾動

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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,410評論 4 61
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,115評論 25 709
  • 同一組中的思想相互之間的邏輯關(guān)系,主要是演繹關(guān)系和歸納關(guān)系,今天學(xué)習(xí)了演繹和歸納的區(qū)別: 1、演繹關(guān)系通常表現(xiàn)為由...
    outstanding5閱讀 192評論 0 0
  • 夏紫由于學(xué)生會競選失敗以及第一次考試考砸了的緣故,從而變得悶悶不樂,話也不愿意多說,表現(xiàn)出了一種低落的情緒。她...
    ca4b92832a31閱讀 633評論 0 1
  • 爺爺對于我來說是一個代名詞,因為我沒有見過他。在我的印象中,幾位老人對我最好的就是我的外公,小學(xué)每個周末走上十里山...
    南歌子吟閱讀 599評論 4 4

友情鏈接更多精彩內(nèi)容