美文网首页
UITableView 性能优化

UITableView 性能优化

作者: xukunluren | 来源:发表于2017-04-25 16:55 被阅读0次


    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来显示就好,不用再创建。

    相关文章

      网友评论

          本文标题:UITableView 性能优化

          本文链接:https://www.haomeiwen.com/subject/ivwvzttx.html