性能优化

12 Dec 2019

这一篇主要讲性能优化的策略,性能检测请查看另外一篇instruments

做性能优化之前,首先要有指标,明确需要优化什么? 那里出错了?

一个app的好坏如何定义?

上面这些都是产品设计和内容的问题,不过要把好的东西呈现出来就需要好的程序员啦,开发者在做好内容的同时,要保证做到

  1. 应用不能无缘无故崩溃,异常处理
  2. 界面展示、交互流畅,零卡顿
  3. 耗电量小
  4. app快速启动
  5. 应用包尽量小

异常处理

避免意外崩溃,app意外崩溃无非是两种原因

  1. 调用方法不当
    • OC中调用了没有实现的方法

      可以使用OC的消息转发机制处理,避免崩溃,并发错误信息当成警告上传,方便后面分析,优化

    • 数组越界

      OC 的数组 也同样可以使用消息转发机制避免崩溃

    • 野指针

      只能靠经验来尽量减少

  2. 内存溢出
    • 加载大内容的东西,没有及时释放。比如同时加载了100000张图片

      对于已知的缓存类,可以通过添加内存不足的监听,内存不足时手动释放来解决
      对于未知的内存增长可以借助Allocations来检测

    • 循环引用,用完的东西没有释放

      每个类打印deallocdeinit方法,遇到没释放的类,可以借助XCode 的 debug memory graph 来分析

    • 栈溢出, 死循环, 递归没有终止条件

      这种bug,在运行时可以很明显的看到重复调用的方法,添加终止条件就好

卡顿的原因

在屏幕成像的过程中,CPU和GPU起着至关重要的作用,在iOS程序中

在iOS中是双缓冲机制,有前帧缓存、后帧缓存

屏幕成像原理

卡顿产生的原因

可以使用CADisplay来检测是否掉桢

卡顿优化 - CPU

卡顿优化 - GPU

离屏渲染

卡顿检测

耗电的主要来源


耗电优化

启动优化

APP的启动

dyld

runtime

main

APP的启动优化

按照不同的阶段

详细的操作文章

安装包瘦身

LinkMap

NSCache, 断点续传