【iOS-性能优化二】启动优化

APP的启动可以分为两种:

  • 冷启动:从0开始启动APP
  • 热启动:APP已经在内存中,在后台存活着,再次点图片

APP的启动优化主要是针对冷启动进行优化
-通过环境变量可以打印出APP的启动时间分析(Edit scheme -> Run -> Arguments

  • DYLD_PRINT_STATISTICS设置为1
  • DYLD_PRINT_STATISTICS_DETAILS设置为1可以看到更详细的时间分析
    如图:


    设置环境变量来监测启动时间

一般这些时间在400ms是正常的;

App冷启动3大阶段:

  • dyld(dynamic link editor,Apple的动态链接器,可用来装载Mach-O文件(可执行文件、动态库等))
    它来主导,将可执行文件加载到内存顺便加载所有依赖的动态库
  • runTime 负责加载成 objc 定义的结构
    1、map_images解析和处理
    2、load_images中调用call_load_methods,调用所有Class和Category的+load方法
    3、进行各种objc结构的初始化(注册Objc类、初始化类对象等)
    4、调用C++静态初始化器和attribute((constructor))修饰的函数
  • main 初始化完成后,dyld就会调用 main函数
  • UIApplicationMain方法,进入 Delegate

优化:

  • 减少动态库,合并一些动态库
  • 减少Objc类、分类的数量,减少Selector数量
  • 减少C++虚函数数量
  • Swift尽量使用 struct

runTime:

  • +initialize方法和dispatch_once取代所有的 __attribute__((contructor))、C++静态构造器、Objc的+load

main:

  • 不要全放在finishLaunching方法里,尽可能将一些操作延迟加载
  • 按需加载

你可能感兴趣的:(【iOS-性能优化二】启动优化)