現(xiàn)在對于iOS開發(fā)者來說越來越注重App的性能優(yōu)化的問題,而表格視圖是App中經(jīng)常使用的UI控件,表格視圖的卡頓會大大的降低用戶體驗。
1.查看是否需要優(yōu)化
真機運行程序,使用instructment中的Core Animation工具查看。左邊一欄的 數(shù)值范圍為0~60,幀數(shù)越高越好,如果滑動的幀數(shù)普遍在50+以上,可以暫時不用優(yōu)化。如果幀數(shù)普遍在30,40,此時視圖會出現(xiàn)卡頓,必須進行優(yōu)化。
2.優(yōu)化的方法(重要性從上到下依次降低)
2.1 行高
行高一定要緩存!緩存行高是解決性能問題的最佳途徑。當(dāng)然,如果當(dāng)前表格的刷新幀數(shù)很高,也可以不緩存行高。
2.2 提前計算
盡量少計算,所需要的數(shù)據(jù)提前計算好
2.3 圓角
控件上不要設(shè)置圓角半徑,以及所有圖片的渲染屬性
2.4 創(chuàng)建控件
不要動態(tài)的創(chuàng)建控件,所有需要的控件需要提前創(chuàng)建好。在顯示的時候,根據(jù)需要,顯示或者隱藏
2.5 cell的層級結(jié)構(gòu)
Cell中控件的層次結(jié)構(gòu)越少越好,數(shù)量也越少越好
3.高級優(yōu)化
注意: 幀數(shù)大于50+,不需要進行高級優(yōu)化。離屛渲染需要 CPU與GPU來回的切換,耗電會比較的厲害
優(yōu)化方法: 離屛渲染+柵格化:
異步繪制后,會生成一張獨立的圖片,當(dāng)表格視圖再進行滾動時候,展示的是生成的圖片,停止?jié)L動之后,可以接收監(jiān)聽
__離屛渲染 __
self.layer.drawsAsynchronously = true
柵格化
self.layer.shouldRasterize = true
self.layer.rasterizationScale = UIScreen.main.scale