UITableView 性能优化

2017-04-25  本文已影响0人  xukunluren


UITableView是我们开发过程中最常用的UI之一,因此掌握UITableView的优化方法,在我们开发的过程中能事半功倍。长话段数,直接进入优化的方法之中。

主要分为以下几点:

1只定义一种Cell。

2提前计算并缓存每个Cell的高度。

3提前创建真正显示的、需要加工的数据并缓存。

4缓存View!

其它(使用不透明的图片,减少子视图的添加,不要阻塞主线程,避免使用图形特效)

1、只定义一种cell

          对于需要展示大量数据的UI控件UITableView ,一般我们都会采用自定义的UITableviewcell的方式进行数据的展示。每个cell所展示的数据不一致,但是展示的样式都大同小异。如下图:

其cell的组成方式无非下图各个子控件组成的。可以通过View的hidden = YES和hidden = NO来进行控制。

2、提前缓存cell的高度

首先要确定的是,在iOS中,系统会先调用“tableView:heightForRowAtIndexPath:”获取每个Cell即将显示的高度,从而确定整个UITableView的布局。然后才调用“tableView:cellForRowAtIndexPath”获取每个Cell,我们也是在这里填充、设置Cell的。

所以,既然高度总会被用到,那就早早的在获取数据时就计算好吧!

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

其实,在Model(Entity)中保存UI的参数是很奇怪的=。=(最好放在ViewModel中,就是MVVM模式的),我们的Entity可能就是下面的样子:

@interfaceDataEntity :NSObject//原始数据

@property(copy,nonatomic)NSString *content;

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

@property(assign,nonatomic)CGFloat cellHeight;

//计算高度

- (void)calculateCellHeight;@end

这样,就不用在“tableView:heightForRowAtIndexPath:”中每次都计算了。

3、提前创建真正显示的、需要加工的数据并缓存

Cell中显示的内容,很多时候可能并不是直接从服务器拿到的数据,而是经过“加工”的数据。如本文中的“动态”也,每个Cell的标题、正文都有可点击的连接Link、表情图片等富文本内容,而我们一般用NSAttributeString类来显示。

既然每次都会用到,倒不如在获取到数据的时候就创建、加工好这些内容,等到需要现实的时候,直接拿来用不就行了。

所以,我们的Entity类可能变成下面这个样子:

@interfaceDataEntity :NSObject

//原始数据

@property(copy,nonatomic)NSString *content;

@property(copy,nonatomic)NSString *title;

//Cell 高度

@property(assign,nonatomic)CGFloat cellHeight;

//真正显示的内容

@property(strong,nonatomic)NSAttributedString *showTitle;

@property(strong,nonatomic)NSAttributedString *showContent;

//计算高度

- (void)calculateCellHeight;

//创建、加工真正显示的内容

- (void)setupShowTitileAndContent;

@end

这样,在“tableView:cellForRowAtIndexPath”中,我们直接拿showTitle、showContent来显示就好,不用再创建。

上一篇下一篇

猜你喜欢

热点阅读