UITableView 性能优化
引言:
# 一. 如何查看刷新的帧率?
- 要保证良好的用户体验, 刷新的帧率要在 50+(帧率最大为60)。
- 右键 XCode 选择 open developer tool --> Instruments 工具 -->
# 二. 表格为什么会卡?
- 在两帧刷新之间,运算没有做完;
- 出现跳帧现象,卡顿。
- 跳帧:也叫丢帧,由于显示器刷新率跟不上程序的计算,只能舍弃一部分画面,这种现象就是跳帧。
# 三. 如何提高表格性能?
- 最重要的就是减少计算量,保证每一帧都能完成计算, 从而达到流畅的效果;
- 减少对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 中的层次越少越好, 子控件的数量越少越好。