objc-init
2019-02-26 本文已影响0人
Ray_lawq
编译过程
-
预处理包含以下内容:
(1)宏定义指令
(2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。
(3) 头文件包含指令
(4)特殊符号 -
编译:拿到预处理以后的内容,通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
-
汇编:把编译处理好的内容翻译成目标机器指令的过程。
-
链接:汇编完成以后,其中的库文件,链接进来
(1)动态链接:在运行的时候加入进来(共享内存,可以被多次使用)
优点:
- 减少打包体积;
- 共享内存,初始化一份,可以被多地方引用
- 热更新(更新动态库)
缺点:
不稳定,不安全(针对第3个优点)
(2)静态链接:在链接阶段将目标文件(.o)与引用的库一起打包到可执行文件中
iOS app 启动过程
map_images 和 load_image 底层主要内容探索
load: 会递归查找没个类,每个类走会执行一次load 方法
initialize:类创建的时候调用, 分类会“覆盖”原类类的实现(分类调用方法,原来的类不调用方法了);原因就是方法列表查找方法实现,重上往下查找,分类加载的晚,所以先会被找到,直接就调用了分类的方法