优化方案.md

参考:

优化方案

UITableView

缓存池存储 cell,复用 cell:

  • cellForRowAtIndexPath: 回调的时候只创建实例,快速返回 cell,不绑定数据。
  • willDisplayCell: forRowAtIndexPath: 的时候通过 dequeueReusableCellWithIdentifier: 方法取缓存的 cell,通过 initWithStyle:reuseIdentifier: 绑定数据(赋值)。

缓存高度:

  • tableView 滑动时,会不断调用 heightForRowAtIndexPath:,当 cell 高度需要自适应时,每次回调都要计算高度,会导致 UI 卡顿。为了避免重复无意义的计算,需要缓存高度。
  • 通过 Dictionary 或 NSCache 的方式进行缓存;
  • 开源项目:FDTemplateLayoutCell

视图层级优化

不要动态创建视图:

  • 在内存可控的前提下,缓存 subview;善用hidden

减少视图层级:

  • 减少 subview 的数量,使用layer 中的 drawrect 绘制,这样可以利用 GPU 离屏渲染;
  • 少用 clearColormaskToBounds,阴影效果等,可以避免 GPU 离屏渲染;

图片优化:

  • 优化图片大小,尽量不要动态缩放(contentMode),避免图形特效,图片缩放颜色渐变等;
  • 尽可能将多张图片合成为一张进行显示;
  • 不要用JPEG的图片,应当使用PNG图片。
  • 子线程预解码(Decode),主线程直接渲染。因为当 image 没有 Decode,直接赋值给 imageView 会进行一个 Decode 操作从而阻塞主线程。
  1. 设置不透明
  2. 不要阻塞主线程,将处理放到子线程中去处理设置最大线程数为 2,利用 NSOperationQueuemaxConcurrentOperationCount 为 2;