objc-init

2019-02-26  本文已影响0人  Ray_lawq

编译过程

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

上一篇下一篇

猜你喜欢

热点阅读