App启动流程

1.首先当程序启动时,系统会读取程序的可执行文件(mach-o), 从里面获取动态加载器(dylb)的路径;
2.加载dylb, dylb会初始化运行环境,配合ImageLoader将二进制文件加载到内存中去;
3.动态链接依赖库, 初始化依赖库,初始化 runtime;
4.runtime 会对项目中的所有类进行类结构初始化,调用所有的 load 方法;
5.最后 dylb 会返回 main 函数地址,main 函数被调用,进入程序入口

main 函数执行顺序
1.内部会调用 UIApplicationMain 函数,创建一个UIApplication对象和它的代理,就是我们项目中的 Appdelegate 类
2.开启一个事件循环(main runloop), 监听系统事件。
3.程序启动完毕时,通知代理Appdelegate, 调用 didFinishLaunching 代理方法,在这里会创建 UIWindow,设置它的rootViewController,
4.最后调用 self.window makeKeyAndVisable显示窗口

启动时间优化

分为 main 函数执行前和执行后,所以优化启动时间也可从两个方面着手

  1. main 函数前的时间优化

1.合并功能类似的类和扩展,由于分类和 oc 的动态绑定有很大关系,所以要尽量减少多余的分类
2.移除不需要的动态库,减少动态库的数量,因为链接动态库是需要时间的,在自己pod工具库的时候,工具库最好是能合并到一个里面,不要弄太多的类。

main 函数后的时间优化

1.这和我们的代码逻辑书写有很大关系,它的执行顺序为 main -> didFinishLanuching -> window、rootViewController -> 获取数据 -> 显示页面

2.这个优化的核心就是,少在 Appdelegate 中写太多代码,一些耗时的操作尽量不要再这里操作,能延迟初始化的,就延迟,不能延迟的就放到后台

页面布局逻辑:先显示界面,给一个默认状态视图,等数据请求完毕后再刷新界面,这样比等数据请求完整财显示界面看起来更加时间快

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 启动时间是衡量应用品质的重要指标。 本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main...
    荒漠现甘泉阅读 4,470评论 0 2
  • 背景知识: mach-o文件为基于Mach核心的操作系统的可执行文件、目标代码或动态库,是.out的代替,其提供了...
    iOS亮子阅读 4,294评论 0 2
  • 背景知识: mach-o文件为基于Mach核心的操作系统的可执行文件、目标代码或动态库,是.out的代替,其提供了...
    Neo_joke阅读 9,265评论 0 46
  • 当用户点击了App图标,到能够看到App主界面内容为止,在这个过程中应用做了那些事情呢?这些事情是否可以优化从而提...
    limeng99阅读 2,713评论 0 0
  • 孩子的想象,有趣 “妈妈,包子是馒头的妈妈吗?” “哦,为什么这么想呢?” “妈妈,你看,因为包子长皱纹了。”
    fly12阅读 861评论 0 0

友情链接更多精彩内容