UITableView性能優(yōu)化,這個問題只要做iOS研發(fā)相關(guān)工作的人都會遇到,或是工作開發(fā)需要,或者面試問題。
我這里整理一下,以便于自己和大家需要時候及時查看!
一,基礎(chǔ)的優(yōu)化,針對API
1,對于頁面展示東西很多,上下頻繁滑動,需要提前計(jì)算緩存好高度。這樣做的原因heightForRowAtIndexPath:是調(diào)用最頻繁的方法,提前計(jì)算緩存高度能有效提高滑動時流暢度。
2,正確使用reuserIdentifier來重用cell
3,在heightForRowAtIndexPath:中盡量不使用cellForRowAtIndexPath:,如果你真是需要調(diào)用它,那么只用一次然后緩存結(jié)果
二,基礎(chǔ)的優(yōu)化,針對view圖層
1,盡量減少subviews的數(shù)量
2,盡量少用或不用透明圖層(帶有透明圖層的view渲染更好性能)
3,cell涉及到圓角,如果cell還多次復(fù)用,盡量換乘圖片或者貝爾賽曲線自己畫出來,提供的layer切圓角API涉及到layer渲染。
4,盡量避免在cellForRowAtIndexPath:中addView給cell動態(tài)添加view,可以在初始化時候添加,然后使用hidden屬性判斷是否顯示。
5,盡量view的Opaque設(shè)置為YES,opaque屬性提示繪制系統(tǒng)如何處理view。如果opaque設(shè)置為YES,繪圖系統(tǒng)會將view看為完全不透明,這樣繪圖系統(tǒng)就可以優(yōu)化一些繪制操作以提升性能。如果設(shè)置為NO,那么繪圖系統(tǒng)結(jié)合其它內(nèi)容來處理view。默認(rèn)情況下,這個屬性是YES。)如果屏幕是靜止的,那么這個opaque屬性的設(shè)置與否不是一個大問題。但是,如果view是嵌入到scroll view中的,或者是復(fù)雜動畫的一部分,不將設(shè)置這個屬性的話肯定會影響程序的性能!
三,高級的優(yōu)化
1,滾動很快時,有針對地加載目標(biāo)范圍的cell,按需加載cell,也能提高流暢度
2,cell中涉及大量網(wǎng)絡(luò)加載的圖片,使用異步加載(這一點(diǎn)我們要感謝開發(fā)SDWebImage的大神)=。=
3,異步繪制,遇到復(fù)雜界面,遇到性能瓶頸時,可能是突破口。
個人日常積累記錄,各位請輕噴!!
參考資料: