APP启动优化

目录

APP的启动分为两种:热启动/冷启动

APP的冷启动主要包含以下几个阶段

APP启动优化的步骤

 

  • 冷启动:app 还没开始启动,从零开始启动
  • 热启动:app以及启动存在后台中,再次点击app 图标的一个种启动
  • 一般app的启动优化主要是针对冷启动的。WWDC2016上Apple建议一个app的冷启动时间大概在400ms左右设。通过添加环境变量可以打印出APP的启动时间分析(Edit scheme -> Run -> Arguments),DYLD_PRINT_STATISTICS置为1,也可以通过设置DYLD_PRINT_STATISTICS_DETAILS为1获得系统在调用main 函数之前主要工作占用的时间信息.
  •  

APP的冷启动主要包含以下几个阶段

  • dylb:用来动态加载链接库,可执行文件,是apple的动态链接库。启动app 时apple会动态加载所有依赖的动态库,当它把可执行文件以及动态库加载完成之后,会通知runtime进行下一步的操作。
  • runtime:
  1. 通过runtime源码可以得知,调用map_images进行可执行文件的解析和处理
  2. 调用load_images执行call_load_methods从而调用 类以及分类的+load方法
  3. 对各种objc结构进行初始化(比如初始化对象,注册类等等)
  4. 以上完成之后,所有的可执行文件/动态库中的所有符号(IMP,SEL,Class,Protocol....)已经按runtime的格式加载到内存中,被runtime管理
  • main:APP的启动由dylb主导,dylb吧可执行文件,Mach-O文件加载到内存,顺便加载所有依赖的动态库。然后由runtime负责加载成objc定义的结构。初始化完成之后,由dylb调用main函数。然后去调用UIApplicationMain函数,再去调用AppDelegate 的didFinishLanchingWithOptions:方法

APP启动优化的步骤

  • 能延迟执行的就延迟执行。比如SDK的初始化,界面的创建。
  • 减少动态库,合并一些动态库(定期的清理一些不必要的动态库)
  • 合并一些功能类似的分类,减少Objc类。
  • 减少C的constructor函数,C++静态对象,ObjC的+load,可以用 initialize方法和 dispath_once取代以上上面的操作
  • main函数中,在不影响用户体验的情况下,延迟加载。

猜你喜欢

转载自blog.csdn.net/qq_33726122/article/details/81909274
今日推荐