objc-init

作者: Ray_lawq | 来源:发表于2019-02-26 13:32 被阅读0次

    编译过程

    1. 预处理包含以下内容:
      (1)宏定义指令
      (2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。
      (3) 头文件包含指令
      (4)特殊符号

    2. 编译:拿到预处理以后的内容,通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。

    3. 汇编:把编译处理好的内容翻译成目标机器指令的过程。

    4. 链接:汇编完成以后,其中的库文件,链接进来
      (1)动态链接:在运行的时候加入进来(共享内存,可以被多次使用)

    优点:

    1. 减少打包体积;
    2. 共享内存,初始化一份,可以被多地方引用
    3. 热更新(更新动态库)

    缺点:
    不稳定,不安全(针对第3个优点)

    (2)静态链接:在链接阶段将目标文件(.o)与引用的库一起打包到可执行文件中

    iOS app 启动过程

    map_images 和 load_image 底层主要内容探索

    load: 会递归查找没个类,每个类走会执行一次load 方法

    initialize:类创建的时候调用, 分类会“覆盖”原类类的实现(分类调用方法,原来的类不调用方法了);原因就是方法列表查找方法实现,重上往下查找,分类加载的晚,所以先会被找到,直接就调用了分类的方法

    相关文章

      网友评论

          本文标题:objc-init

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