iOS - 帧动画优化点

iOS内存优化基础
腾讯帧动画优化方案

基础内存优化

1.I/O性能优化

减少I/O次数是性能优化的关键点:

  • 将零碎的内容作为一个整理进行写入
  • 使用合适的I/O操作API
  • 使用合适的线程
  • 使用NSCache做缓存能够减少I/O

1-1.NSCache

  • 自动清理系统占用的内存
  • NSCache线程安全
  • 缓存对象被清理时会有回调
  • 可以控制是否清理

2.内存性能

突然的大量内存需求是会影响相应的:

  • 【强制】优化计算的复杂度从而减少CPU的使用
  • 【强制】在应用相应交互的时候停止没必要的任务处理
  • 【强制】设置合适的Qos
  • 【强制】将定时器任务合并,让Runloop更多时候处于idle状态

3.控制App的Wake次数(帧动画暂时不考虑)

通知、VoIP、定位、蓝牙都会使设备被唤醒,唤醒的过程比较大的消耗。

图片优化进阶

原理分析

1.图片加载解码

比较容易影响性能:

  • 加载图片(取决于CPU和I/O)
    • 提前加载图片(可以设置优先级,优先级高的可以预加载。不可以延迟加载,因为延迟加载不能保证每帧提前加载到图片)
  • 图片解码(比加载图片更加耗时,博文中测试结果是3倍,iOS默认是在主线程图片解码的,但是解码后的图片太大,一般不会缓存到disk中,但是我可以尝试)

2.缓存

缓存分为原图片的缓存和解码后的位图数据的缓存。

3.渲染

3-1.offscreen rendring

图片在绘制当前屏幕的时候,显卡需要进行一次渲染,然后在绘制到当前屏幕。
对于显卡来说,onscreen和offscreen上下文切换时非常昂贵的(设计OpenGL的pipeline和barrier等)。

- layer mask
- layer.maskToBounds
- layer.allowGroupOpacity = YES
- layer.opcaity < 1.0
- layer.shouldRasterize = YES
- layer.cornerRadius
- layer.edgeAntialiasingMask
- layer.allowsEdgeAntialiasing

3-2.Blending 混合像素颜色是会导致性能问题

优化点

  • 精灵序列帧
  • 提前解码在渲染前,不要渲染了去解码
  • 缓存解码后的位图数据 disk 和 内存中,因为有些礼物效果比较普遍使用
  • 图像素材像素尽量对其,尽量减少透明像素
posted @ 2018-04-03 14:17  lvable  阅读(577)  评论(0编辑  收藏  举报