Contents
  1. 1. iOS-App启动速度优化
    1. 1.1. 启动时间
    2. 1.2. 一: main()之前
      1. 1.2.1. 动态链接,Image加载
      2. 1.2.2. 如何衡量时间
      3. 1.2.3. 可优化点
    3. 1.3. 二: main()之后
    4. 1.4. 参考

iOS-App启动速度优化

启动时间

启动时间 = main()之前的时间 + main()之后的时间

一: main()之前

动态链接,Image加载

  • 什么是Image
    • 可执行文件 .o
    • dylib 动态链接库. Framework就是动态链接库和相应资源包含在一起的一个文件夹结构
    • boundle资源文件

如何衡量时间

  • 在真机调试的时候勾选dyldPRINTSTATISTICS选项
  • 会有相关的Log

可优化点

  • 减少不必要的framework
  • check framework应当设为optional和required,如果该framework在当前App支持的所有iOS系统版本都存在,那么就设为required,否则就设为optional,因为optional会有些额外的检查
  • 合并或者删减一些OC类,关于清理项目中没用到的类,使用工具AppCode代码检查功能,查到当前项目中没有用到的类如
  • 删除废弃方法
  • +load里少做事情,能延迟到+Initialize中就延迟
  • 精良不用C++虚函数(创建虚函数有开销)

二: main()之后

主要是App本身相关的一些初始化服务

  • 不适用xib/sb,使用代码加载首页视图
  • NSUserDefaults实际上是在Library文件夹下会生产一个plist文件,如果文件太大的话一次能读取到内存中可能很耗时,这个影响需要评估,如果耗时很大的话需要拆分(需考虑老版本覆盖安装兼容问题)
  • 每次用NSLog方式打印会隐式的创建一个Calendar,因此需要删减启动时各业务方打的log,或者仅仅针对内测版输出log
  • 梳理应用启动时发送的所有网络请求,是否可以统一在异步线程请求
  • 首页相关控制器的viewDidLoad/viewWillAppear里少做操作或者延迟做
  • 少做/不做 I/O 操作,或者异步做

参考

https://techblog.toutiao.com/2017/01/17/iosspeed/

Contents
  1. 1. iOS-App启动速度优化
    1. 1.1. 启动时间
    2. 1.2. 一: main()之前
      1. 1.2.1. 动态链接,Image加载
      2. 1.2.2. 如何衡量时间
      3. 1.2.3. 可优化点
    3. 1.3. 二: main()之后
    4. 1.4. 参考