1.Cell的重用機制,以及重用標識符:
- 如果不重用Cell時,每當一個Cell顯示到屏幕上時,就會重新創建一個新的Cell.
- 如果有很多數據的時候,就會堆積很多Cell.如果重用Cell,為Cell創建一個ID.
- 每當需要顯示Cell 的時候,都會先去緩沖池中尋找可循環利用的Cell,如果沒有再重新創建Cell.
2.避免Cell的重新布局:
- Cell的布局填充等操作比較耗時,一般創建時就布局好.
- 如可以將Cell單獨放到一個自定義類,初始化時就布局好.
3.提前計算并緩存Cell的屬性及內容:
- 當我們創建Cell的數據源方法時,編譯器并不是先創建Cell 再定Cell的高度.
- 而是先根據內容一次確定每一個Cell的高度,高度確定后,再創建要顯示的Cell,滾動時,每當Cell進入待顯示狀態都會計算高度,提前估算高度告訴編譯器,編譯器知道高度后,緊接著就會創建Cell,這時再調用高度的具體計算方法,省的浪費時間去計算顯示以外的Cell.
4.減少Cell中控件的數量:
- 盡量使Cell得布局大致相同,不同風格的Cell可以使用不用的重用標識符.
- 初始化時添加控件,不適用的可以先隱藏.
5.盡量不要使用ClearColor,無背景色,透明度也不要設置為0:
- 渲染耗時比較長.
6.使用局部更新:
- 如果只是更新某組的話,使用reloadSection進行局部更新.
7.加載網絡數據,下載圖片,使用異步加載,并緩存.
8.盡量少使用addView給Cell動態添加view.
9.按需加載Cell,Cell滾動很快時,只加載范圍內的Cell.
10.不要實現無用的代理方法,tableView只遵守兩個協議.
11.緩存行高:estimatedHeightForRow不能和HeightForRow里面的layoutIfNeed同時存在,這兩者同時存在才會出現“竄動”的bug.所以我的建議是:只要是固定行高就寫預估行高來減少行高調用次數提升性能.如果是動態行高就不要寫預估方法了,用一個行高的緩存字典來減少代碼的調用次數即可.
PS : 不透明的視圖可以極大地提高渲染的速度.因此如非必要,可以將tableViewCell及其子視圖的opaque屬性設為YES(默認值),其中的特例包括背景色,它的alpha值應該為1(例如不要使用clearColor);圖像的alpha值也應該為1,或者在畫圖時設為不透明.