2018-05-06

iOS启动原理

iOS启动 大致可分为t1(pre-main)main方法执行前 和 main之后,也就是didFinishLaunching方法之间(我称为t2);  totalLaunchTime = t1 + t2,也可以加上rootViewController里第一个tabbar viewDidLoad里的执行时间。 我们看看如何在这些 步骤里 尽量减少执行时间。

首先我们大概了解下app启动原理。点击app 时。dyld 代码执行有三步。

首先由dyld(即 dynamic link editor)动态链接器, 加载动态库,可执行文件(mach-O)加载入内存,生成对应的image(镜像文件),

随后进行link操作, 这里分三步, 1.递归加载依赖库进入内存, 2.递归rebase 修复地址, 因为ASLR 随机更改了 应用的地址分配, 需要rebase 修复地址 找到对应的代码地址执行。3.bind , 对库中所有的nolazy 符号进行bind.

最后 执行initializeMainExecutable. 调用所有的Image的Initializer 进行初始化。这里的Initializer是一个函数指针,指向 image初始化方法的地址;

这里执行第一个libsystem.dylib时, 会调用runtime初始化。 runtime 在这里 对类进行初始化,调用所有的load方法。 在去调用后面的initializer, 调用完所有的initializer后 ,dyld 会回调main地址 执行main方法

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【思维导图实战派】T2-14/21 课程收获 这次第二节课学习的内容和T1班时,有很多方面都不一样了,感触很多、也...
    思维导图实战派_陈建花阅读 128评论 0 1
  • 应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、...
    新_1740阅读 462评论 0 2
  • 不要九十!不要八十!七十也不收你的!现在只要六十!你没有听错!就是六十!太疯狂了简直!只要六十就可以让孩子们回家过...
    新其谦阅读 166评论 0 0
  • 司徒里亚磊很喜欢清静,一顿早饭下来,他眉头都没有松过,显得格外的不耐烦。早餐店里从未有过这么多人,大部分都是女生,...
    萧潇梦雨阅读 712评论 0 0
  • 今天晚上从托福接着孩子回家吃饭,孩子在饭桌上吃了很香,我们在一起聊着天,蛮开心的! 其实今天科学...
    千金格格阅读 238评论 0 0