UITabView卡頓問題與優(yōu)化

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è)為不透明.

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

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,168評(píng)論 1 92
  • 1.最常用的就是cell的重用, 注冊(cè)重用標(biāo)識(shí)符 如果不重用cell時(shí),每當(dāng)一個(gè)cell顯示到屏幕上時(shí),就會(huì)重新創(chuàng)...
    smart_small閱讀 6,322評(píng)論 3 10
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,189評(píng)論 25 708
  • 1.最常用的就是cell的重用, 注冊(cè)重用標(biāo)識(shí)符 如果不重用cell時(shí),每當(dāng)一個(gè)cell顯示到屏幕上時(shí),就會(huì)重新創(chuàng)...
    i馬閱讀 552評(píng)論 0 1
  • 七夕征文 Part 1.我是誰? 【昵稱】:染雨若 【地點(diǎn)】:天津。就是那個(gè)即將開全運(yùn)會(huì)所以大部分快遞都停運(yùn)了的地...
    染雨若閱讀 678評(píng)論 37 9

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