iOS UITableView的性能优化

作者: Lxin_ | 来源:发表于2019-04-16 02:11 被阅读84次

UITableView作为iOS中使用最频繁的控件之一,其性能优化也是要常常面对的,尤其是当数据量偏大且设备性能不足时。UITableView该从那几处开始优化,本文将详细阐明。

病因

治病就要先知道病因,我们先分析一下影响UITableView性能的因素

  1. tableviewCellheight计算不合理。
  2. tableView: cellForRowAtIndexPath:方法中处理了过多业务。
  3. tableviewCellsubview层级太复杂,做了大量透明处理。

解决方案

高度计算

  • 定高Cell,设置self.tableView.rowHeight = 88;//rowHeight默认的值是44,不需要实现tableView: didSelectRowAtIndexPath:方法,以节省不必要的计算和开销
  • 动态高度Cell,自从iOS8之后有了self sizing cell的概念,cell可以自己算出高度,使用self sizing cell需要满足以下三个条件:
    // 1.使用Autolayout进行UI布局约束(要求cell.contentView的四条边都与内部元素有约束关系)
    // 2.指定TableView的estimatedRowHeight属性的默认值
    self.tableView.estimatedRowHeight = 44.0;
    // 3.指定TableView的rowHeight属性为UITableViewAutomaticDimension
    self.tableView.rowHeight = UITableViewAutomaticDimension;

除了提高cell高度的计算效率之外,对于已经计算出的高度,我们需要进行缓存,对于已经计算过的高度,没有必要进行计算第二次。

tableView: cellForRowAtIndexPath:

  • cell复用
  • 实例对象在tableView: cellForRowAtIndexPath:创建,绑定数据放在tableView:willDisplayCell:forRowAtIndexPath:
  • 图片显示异步加载

tableviewCell的subview层级

  • 不要使用透明背景、不要使用阴影渐变
  • 减少视图的数目,在UIView的drawRect方法中自定义绘制
  • 不要给cell动态添加subView,在初始化cell的时候就将所有需要展示的添加完毕,然后根据需要来设置hide属性显示和隐藏。
  • layer.mask/layer.masksToBounds/layer.cornerRadius等圆角会造成离屏渲染,尽量用贝塞尔曲线实现

相关文章

网友评论

    本文标题:iOS UITableView的性能优化

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