提升表視圖的性能
UITableView做爲應用中最經常使用的視圖,它的性能優化問題幾乎是常常說起。下面對在非網絡訪問狀況下的表視圖性能優化進行了主要的幾點說明:
1.自定義類或XIB文件時
在系統提供的樣式不能知足咱們的時候,咱們常常會建立自定義類或者XIB文件來自定義單元格樣式。
在以前,咱們一般經過loadNib的方式或者在代理方法中繼續使用老的方法來設置重用,管理緩存池。在IOS6之後,咱們能夠經過註冊的方式在註冊單元格甚至表頭視圖,讓系統來更高效的進行管理。
2.InterfaceBuilder
聽說有不少偏執的工程獅們堅持手打代碼來完成工程,討厭拖拖拽拽。不過隨着IB的不斷強大,已經有愈來愈多的人喜歡上了使用IB來創建和管理界面。在新的Xcode5中,IB又進步了很多。回到正題,儘管如此,在使用高性能的Cell時,仍是推薦使用代碼來建立單元格類。當UITableViewCell擁有多個子視圖時,IOS的渲染機制會拖慢速度。重寫drawRect直接繪製內容的方式能夠提升性能,而不是在類初始化的時候初始化一些label或者imageview等。
3.圖層顏色問題
透明圖層對渲染性能會有必定的影響,系統必須將透明圖層與下面的視圖混合起來計算顏色,並繪製出來。減小透明圖層並使用不透明的圖層來替代它們,能夠極大地提升渲染速度。
4.渲染中注意的問題
繪製時要儘量的避免分配資源,好比UIFont,NSDateFormatter或者任何在繪製時須要的對象,推薦使用類層級的初始化方法中執行分配,並將其存儲爲靜態變量。
5.爲代理方法瘦身
咱們常常能看到在項目中,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
這個方法中的代碼多的嚇人,咱們能夠講一些數據綁定到cell中,或者在有多個tableview的時候,將其綁定到其餘的tableviewcontroller中去。這樣能夠方便維護和管理,其實也對程序運行性能有很大的幫助。
手工繪製單元格
下面就繪製一個表視圖單元格,並在表視圖中顯示。
初始化數據
重點在於繪製,我首先建立了一個繼承自UITableViewCell的父類一會讓咱們的單元格繼承它,父類中有一個UIView類型的contentView成員,全部的繪製將在這個成員上進行。
下面是繪製單元格
在初始化類方法中初始化字體資源
將數據綁定到這個單元格中
實現父類的drawContentView方法,實現繪製
雖然方法很長,可是隻要會簡單的quartz繪圖這些都是最基礎的方法。
完成後咱們講這個類註冊到tableview中
[self.tableView registerClass:[HRCustomCell class] forCellReuseIdentifier:CellIdentifier];
再來看咱們的代理方法
就只有3行,比把數據都從這裏賦值的方法要簡潔許多。
若是用真機調試,性能也要比使用非手工繪製的性能要好不少。
以上爲本篇博客所有內容,歡迎指正和交流。轉載註明出處~