UITableView 性能优化

引言:


# 一. 如何查看刷新的帧率?

  1. 要保证良好的用户体验, 刷新的帧率要在 50+(帧率最大为60)。
  2. 右键 XCode 选择 open developer tool --> Instruments 工具 -->

# 二. 表格为什么会卡?

  1. 在两帧刷新之间,运算没有做完;
  2. 出现跳帧现象,卡顿。
  3. 跳帧:也叫丢帧,由于显示器刷新率跟不上程序的计算,只能舍弃一部分画面,这种现象就是跳帧。

# 三. 如何提高表格性能?

  • 最重要的就是减少计算量,保证每一帧都能完成计算, 从而达到流畅的效果;
  • 减少对CPU的消耗, 用 内存来换取 CPU。

# 四. 优化方式

# 1. 对 cell 进行操作:

栅格化:

  • 美工的术语, 将 cell 中所有的 内容生成一张独立的图像, 在cell滚动时只显示图像。
  • 注意: 栅格化时必须要指定分辨率,不然会按照1倍分辨率生成图像,图像会模糊。
self.layer.shouldRasterize = YES;
// 栅格化时必须制定分辨率,不然会按照1倍分辨率生成图像, 图像模糊
self.layer.rasterizationScale = [UIScreen mainScreen].scale;

异步绘制:

  • 对 cell 进行异步绘制, 苹果介绍很少, 只是说 在 cell 比较复杂的时候可以使用。
self.layer.drawsAsynchronously = YES;

# 2. 行高一定要缓存

在表格滚动时 行高方法 调用的非常频繁,将行高缓存起来,避免每次都需要去计算。

# 3. 不要动态创建子视图

在 cell 中把所有的子视图都提前创建好,在不使用时可以 hidden = yes。

# 4. 所有的子视图 都要 设置背景颜色

如果不设置背景颜色, push 到下一界面时 会卡顿。

# 5. 所有的颜色 都不要设置 alpha

  • 如果设置 alpha,会严重影响性能!
  • 没有透明度的视图, 会直接覆盖后面的东西;
  • 有透明度的视图, 会先 计算 视图重叠面积,然后再根据透明度来绘制视图, 特别麻烦!

# 6. 减少计算

所有需要的素材尽量提前计算好,避免大量的计算,出现跳帧的现象。

# 7. cell 不要过于复杂

cell 中的层次越少越好, 子控件的数量越少越好。

# 8. 所有的子视图都添加到 contentView 上