【高级iOS】启动时间优化

  • 时间分为两个部分 T1(main前) + T2(main后), {T1:系统环境布局时间:创建进程,加载解析可执行文件(库加载,堆栈环境配置等等), T2:从main函数到第一个界面显示时间}

  • 1 库加载越多,启动越慢

  • 2 Objc类越多,越慢

  • 3 静态对象全局对象越多,启动越慢

  • 4 Objc的 +load越多,启动越慢

我们比较能把控的点:load 和 T2时间上进行优化

  • 每个objc类都有一个 +load函数,而它的调用优先级在调用main函数之前
  • 通过以下操作可以论证上述的观点


    优化3.png
启动优化2.png
  • 编译,控制台输出如下
2018-05-09 17:02:43.610114+0800 demo[6371:689596] +[ViewController load]
2018-05-09 17:02:43.613407+0800 demo[6371:689596] main
(lldb) 
  • 结论1:尽量避免过多使用+load方法,可以使用+initlalize替代
    在系统第一次使用到这个类的使用,才会使用到他的+(void)initlalize方法,比如:
【  A alloc】init】 
//  第一次执行的时候,会先执行 A的nitialize  然后才alloc
  • 结论2:减少- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里面的操作,在启动页出现后再进行相关操作.(例如放到子线程中去执行)

关于每个objc文件的+load函数的执行循序

  • 每个objc文件都有+load方法,那么他们的执行顺序是怎么样的?
    优化4.png
  • 此处的文件顺序,决定了+load的执行顺序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、...
    hgl阅读 447评论 0 0
  • 应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、...
    新_1740阅读 462评论 0 2
  • 本文首发个人博客:iOS App 启动性能优化 应用启动时间,直接影响用户对一款应用的判断和使用体验。ZAKER新...
    Chars阅读 2,185评论 1 11
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,547评论 8 265
  • 不想等朋友去选择我,我也不想去选择朋友。不明白现在的处世态度,真心想跟情商高的人交朋友,再生气也不会撕破脸。
    千岩_3fdd阅读 158评论 8 1