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方法中,減少任何不必要的操作,非同步繪製