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