iOS之tableView性能優化/tableView滑動卡頓?


本文圍繞以下幾點展開tableView性能優化的論述?

1.UITableViewCell重用機制?

2.tableView滑動為什么會卡頓?

3.優化方法?

4.總結

1.UITableViewCell重用機制?

UITableView只會創建一屏幕(或者一屏幕多一點)的cell,其他都是取出來重用的。每當cell滑出屏幕的時候,就會放到一個集合中,當要顯示某一位置的cell時,會先去集合中取,有的話,就直接拿出來顯示,沒有在創建。

2.tableView滑動為什么會卡頓?

cell賦值內容時,會根據內容設置布局,也就可以知道cell的高度,若有1000行,就會調用1000次 cellForRow方法,而我們對cell的處理操作,都是在這個方法中賦值,布局等等,開銷很大。

3.優化方法?

3.1優化:heightForRow方法處理cell高度。

     思路:賦值和計算布局分離。cellForRow負責賦值,heightRorRow負責計算高度。

3.2自定義cell繪制:

    各個信息都是根據之前算好的布局進行繪制的。需要異步繪制。重寫draeRect方法就不需要異步繪制了,因為drawRect本來就是異步繪制的。圖文混排的繪制,coreText繪制。

3.3按需加載(UIScrollView方面):

     如果目標行與當前行相差超過指定行數,只在目標滾動范圍的前后制定n行加載。滾動很快時,只加載目標范圍內得cell,這樣按需加載,極大地提高了流暢性。

4.總結

1.提前計算並緩存好高度,因為heightForRow最頻繁的調用。

2.異步繪制,遇到復雜界面,性能瓶頸時,可能是突破口。

3.滑動時按需加載,這個在大量圖片展示,網絡加載時,很管用。(SDWebImage已經實現異步加載)。

4.重用cells。

5.如果cell內顯示得內容來自web,使用異步加載,緩存結果請求。

6.少用或不用透明圖層,使用不透明視圖。

7.盡量使所有的view opaque,包括cell本身。

8.減少subViews

9.少用addView給cell動態添加view,可以初始化的時候就添加,然后通過hide控制是否顯示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM