1. 程式人生 > >iOS總結-效能優化-UITableView效能優化-定義一種Cell

iOS總結-效能優化-UITableView效能優化-定義一種Cell

隨著APP使用者介面內容越來越豐富,,再強的手機可能都無法同時渲染複雜的UI介面和保證流暢的體驗.

關於UITableView怎麼實現,正常的當然是用UITableview+自定義的UITableviewCell.

本篇的優化策略:

只定義一種cell

提前計算並快取每個Cell的高度

提前建立真正顯示的/需要加工的資料並快取

快取View

其他

只定義一個Cell: 具體的還是要分析頁面特徵是否相似度很高.重用=大致固定數量的Cell,

UITableView已經為我們提供了Cell的重用,如registerNib:forCellReuseIdentifier註冊自定義的Cell的Nib,然後在"cellForRowAtIndexPath"的時候用"dequeueReusableCellWithIdentifier"獲取重用cell

所以,我們完全可以中建立一種Cell,雖然這樣一個Cell的"體積"可能會很大,但是介於Cell的數量不會很多

補充:如果Cell的共有特徵還是蠻多的,可以嘗試建一個Cell,雖然這個Cell的體積可能會很大,但是重用性很強,完全可以接受的.

只定義一種Cell的好處:

減少程式碼量,減少Nib檔案的數量,統一一個Nib檔案定義Cell,容易修改/維護.

基於Cell的重用,真正執行時鋪滿螢幕所需的Cell數量大致是固定的,設為N個.如果只有一種Cell,就只有N個cell的例項;如果M種Cell,那麼執行時最多可能會是M*N=MN個cell的例項,能少點就少點.

善用hidden隱藏(顯示) SubView

既然只定義一種Cell,就把所有不同型別的view都定義好,放在cell裡面,通過hidden顯示/隱藏,來顯示不同型別的內容.

所以我們在"cellForRowAtIndexPath"函式中,設定cell的樣式/內容時,通過顯示/隱藏對應的子view.

在使用者快速滑動中,只是單純的顯示/隱藏subview比實時建立要快.

對高度進行快取,提前建立真正顯示的,需要加工的資料並快取

也可以快取View

其他:  儘量設定Cell的view為opaque,避免GPU對Cell下面的內容進行繪製

          避免大量的圖片縮放/顏色漸變等

         避免同步的從網路/檔案獲取資料   必須的

        用shadowPath建立陰影

       儘量減少subview的數量. 多用drawRect繪製元素, 替代用view顯示

       儘量顯示大小剛好合適的圖片資源

    快取一切可以快取的,就是用空間替換時間

   在UITableView的delegate/dataSource方法中,減少任何不必要的操作,非同步繪製

參考http://tutuge.me/2015/02/19/提升UITableView效能-複雜頁面的優化/

http://www.cocoachina.com/ios/20150602/11968.html