美文网首页
main函数运行,app做了哪些事

main函数运行,app做了哪些事

作者: Adam_潜 | 来源:发表于2018-12-09 16:29 被阅读26次

    http://www.cocoachina.com/ios/20170716/19876.html

    系统先读取App的可执行文件(Mach-O文件),从里面获得dyld的路径,然后加载dyld,dyld去初始化运行环境,开启缓存策略,加载程序相关依赖库(其中也包含我们的可执行文件),并对这些库进行链接,最后调用每个依赖库的初始化方法,在这一步,runtime被初始化。当所有依赖库的初始化后,轮到最后一位(程序可执行文件)进行初始化,在这时runtime会对项目中所有类进行类结构初始化,然后调用所有的load方法。最后dyld返回main函数地址,main函数被调用,我们便来到了熟悉的程序入口。

    1、main之前的加载过程
    1)dyld 开始将程序二进制文件初始化
    2)交由ImageLoader 读取 image,其中包含了我们的类,方法等各种符号(Class、Protocol 、Selector、 IMP)
    3)由于runtime 向dyld 绑定了回调,当image加载到内存后,dyld会通知runtime进行处理
    4)runtime 接手后调用map_images做解析和处理
    5)接下来load_images 中调用call_load_methods方法,遍历所有加载进来的Class,按继承层次依次调用Class的+load和其他Category的+load方法
    6)至此 所有的信息都被加载到内存中
    7)最后dyld调用真正的main函数
    注意:dyld会缓存上一次把信息加载内存的缓存,所以第二次比第一次启动快一点

    相关文章

      网友评论

          本文标题:main函数运行,app做了哪些事

          本文链接:https://www.haomeiwen.com/subject/jvhkhqtx.html