iOS APP 加载过程和性能优化
2020-03-03 本文已影响0人
孙掌门
iOS APP 加载过程和性能优化
主要耗电原因
- 定时器
- 网络
- CPU
- 位置
- 图像,GPU
- 文件 IO,尽量不要频繁写数据,尽量一次性写入,读取大量数据的时候,可以考虑 GCD dispatch_io,数据量较大,建议使用数据库
- 减少,压缩网络数据
冷启动
app 从来没有启动过,从0到启动叫冷启动
热启动
已经启动过,没有杀死,再次启动
APP 启动过程
- app的启动主要有 dyld 负责,dyld 首先将可执行文件加载到内存当中,然后加载所有的依赖的动态库
- 然后由 runtime 负责加载 objc 定义的结构,比如类,分类等
- 初始化完毕,开始加载main函数
- 然后调用 APPdelegate 的 didFinishLaunchingWithOptions 方法
优化
- 减少动态库的依赖,没有用到的不要依赖
- 减少类和分类的数量,减少selector的数量
- 减少 C++ 虚函数的数量,减少虚表
- swift 尽量使用 struct
- 用 initialize 和 dispatch_once 方法 来取代 +load 方法
- main 函数和 didFinishLaunchingWithOptions 里面尽量少做操作,能延迟就延迟
瘦身
ipa 主要啊由可执行文件和资源文件组成
- 资源瘦身(图片视频),可以采用无损压缩的形式,去掉没有用到的资源(有开源项目)
- 编译器优化,将 Strip Linked Product,Make Strings Read-Only,Symbols Hidden by Default 设置为 yes。
- 去掉异常支持,Enable C++ Exceptions , Enabled Objective-C Exceptions 设置为 NO,Other C Flags 添加 -fno-exceptions
- 检测并去掉未使用的代码,利用 appcode ,code-inspect code ,检测
- Write Link Map File,可以看到我们的方法占用的大小,可借用开源库,github 上 LinkMap 来检测。