UITableView 性能優(yōu)化


UITableView是我們開發(fā)過程中最常用的UI之一,因此掌握UITableView的優(yōu)化方法,在我們開發(fā)的過程中能事半功倍。長話段數(shù),直接進入優(yōu)化的方法之中。

主要分為以下幾點:

1只定義一種Cell。

2提前計算并緩存每個Cell的高度。

3提前創(chuàng)建真正顯示的、需要加工的數(shù)據(jù)并緩存。

4緩存View!

其它(使用不透明的圖片,減少子視圖的添加,不要阻塞主線程,避免使用圖形特效)

1、只定義一種cell

? ? ? ? ? 對于需要展示大量數(shù)據(jù)的UI控件UITableView ,一般我們都會采用自定義的UITableviewcell的方式進行數(shù)據(jù)的展示。每個cell所展示的數(shù)據(jù)不一致,但是展示的樣式都大同小異。如下圖:


其cell的組成方式無非下圖各個子控件組成的。可以通過View的hidden = YES和hidden = NO來進行控制。


2、提前緩存cell的高度

首先要確定的是,在iOS中,系統(tǒng)會先調(diào)用“tableView:heightForRowAtIndexPath:”獲取每個Cell即將顯示的高度,從而確定整個UITableView的布局。然后才調(diào)用“tableView:cellForRowAtIndexPath”獲取每個Cell,我們也是在這里填充、設(shè)置Cell的。

所以,既然高度總會被用到,那就早早的在獲取數(shù)據(jù)時就計算好吧!

在Model(Entity)中計算并保存Cell的高度

其實,在Model(Entity)中保存UI的參數(shù)是很奇怪的=。=(最好放在ViewModel中,就是MVVM模式的),我們的Entity可能就是下面的樣子:

@interfaceDataEntity :NSObject//原始數(shù)據(jù)

@property(copy,nonatomic)NSString *content;

@property(copy,nonatomic)NSString *title;//Cell 高度

@property(assign,nonatomic)CGFloat cellHeight;

//計算高度

- (void)calculateCellHeight;@end

這樣,就不用在“tableView:heightForRowAtIndexPath:”中每次都計算了。

3、提前創(chuàng)建真正顯示的、需要加工的數(shù)據(jù)并緩存

Cell中顯示的內(nèi)容,很多時候可能并不是直接從服務(wù)器拿到的數(shù)據(jù),而是經(jīng)過“加工”的數(shù)據(jù)。如本文中的“動態(tài)”也,每個Cell的標(biāo)題、正文都有可點擊的連接Link、表情圖片等富文本內(nèi)容,而我們一般用NSAttributeString類來顯示。

既然每次都會用到,倒不如在獲取到數(shù)據(jù)的時候就創(chuàng)建、加工好這些內(nèi)容,等到需要現(xiàn)實的時候,直接拿來用不就行了。

所以,我們的Entity類可能變成下面這個樣子:

@interfaceDataEntity :NSObject

//原始數(shù)據(jù)

@property(copy,nonatomic)NSString *content;

@property(copy,nonatomic)NSString *title;

//Cell 高度

@property(assign,nonatomic)CGFloat cellHeight;

//真正顯示的內(nèi)容

@property(strong,nonatomic)NSAttributedString *showTitle;

@property(strong,nonatomic)NSAttributedString *showContent;

//計算高度

- (void)calculateCellHeight;

//創(chuàng)建、加工真正顯示的內(nèi)容

- (void)setupShowTitileAndContent;

@end

這樣,在“tableView:cellForRowAtIndexPath”中,我們直接拿showTitle、showContent來顯示就好,不用再創(chuàng)建。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容