UITableViewCell的重用,uitableviewcell
UITableViewCell的重用一、Cell的重用原理: 當滾動列表時,部分UITableViewCell會移出視窗,UITableView會將視窗外的UITableViewCell放入一個對象池中,等待重用。當UITableView要求dataSource返回UITableViewCell時,dataSource會先查看這個對象池,如果池中有未使用的UITableViewCell,dataSource會用新的資料配置這個UITableViewCell,然後返回給UITableView,重新顯示到視窗中,從而避免建立新對象。
還有一個非常重要的問題:有時候需要自訂UITableViewCell(用一個子類繼承UITableViewCell),而且每一行用的不一定是同一種UITableViewCell,所以一個UITableView可能擁有不同類型的UITableViewCell,對象池中也會有很多不同類型的UITableViewCell,那麼UITableView在重用UITableViewCell時可能會得到錯誤類型的UITableViewCell。
解決方案:UITableViewCell有個NSString *reuseIdentifier屬性,可以在初始化UITableViewCell的時候傳入一個特定的字串標識來設定reuseIdentifier(一般用UITableViewCell的類名)。當UITableView要求dataSource返回UITableViewCell時,先通過一個字串標識到對象池中尋找對應類型的UITableViewCell對象,如果有,就重用,如果沒有,就傳入這個字串標識來初始化一個UITableViewCell對象。
二、Cell的效能最佳化
UITableView預設只會載入出現在螢幕上面的cell,沒當有一個cell移除螢幕,就會儲存到緩衝池裡找。
效能最佳化步驟:
步驟一:定義cell的標識(不需要每次都建立cell標識,因此需要使用static,static標識只會在第一次建立,以後都不會建立了。)
步驟二:從緩衝池裡取cell
步驟三:判斷取出cell是否為空白,如果為空白就手動建立cell。
三、如何提高tableView的效能
a、重用cell
我們都知道申請記憶體是需要時間,特別是在一段時間內頻繁的申請記憶體將會造成很大的開銷,而且上tebleView中cell大部分情況下布局都是一樣的,這個時候我們可以通過回收重用機制來提高效能。
b、避免content的重新布局
盡量避免在重用cell時候,對cell的重新布局,一般情況在在建立cell的時候就將cell布局好。
c、使用不透明的subView
在定製cell的時候,將要添加的subView設定成不透明的會大大減少多個view層疊加時渲染所需要的時間。
d、如果方便,直接重載subView的drawRect方法
如果定製cell的過程中需要多個小的元素的話,最好直接對要顯示的多重專案進行繪製,而不是採用添加多個subView。
e、tableView的delegate的方法如非必要,盡量不要實現
tableView的delegate中的很多函數提供了對cell屬性的進一步控制,比如每個cell的高度,cell是否可以編輯,支援的edit風格等,如非必要最好不要實現這些方法因為快速的調用這些方法也會影響效能。