新闻资讯
IOS探索 IOS静态库与动态库
1.编译过程
在日常开发过程中,开发者会使用成千上万次的Command + B/R进行开发调试,但可能很少有人关注过这个过程中Xcode帮我们做了哪些事情(iOS开发者往往会吐槽Xcode越来越难用了,但不得不承认它越来越强了)
事实上,这个过程分解为4个步骤,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking).------ 摘自《程序员的自我修养-- 链接、装载与库》
在以上4个步骤中,IDE主要做了以下几件事:
- 预编译:处理代码中的# 开头的预编译指令,比如删除#define并展开宏定义,将#include包含的文件插入到该指令位置等
- 编译:对预编译处理过的文件进行词法分析、语法分析和语义分析,并进行源代码优化,然后生成汇编代码;
- 汇编:通过汇编器将汇编代码转换为机器可以执行的指令,并生成目标文件.o文件
- 链接:将目标文件链接成可执行文件。这一过程中,链接器将不同的目标文件链接起来,因为不同的目标文件之间可能有相互引用的变量或调用的函数,如我们经常调用Foundation框架和UIKit框架中的方法和变量,但是这些框架跟我们的代码并不在一个目标文件中,这就需要链接器将它们与我们自己的代码链接起来
Foundation和UIKit这种可以共享代码、实现代码的复用统称为库——它是可执行代码的二进制文件,可以被操作系统写入内存,它又分为静态库和动态库
2.静态库
静态库是指链接时完整的拷贝到可执行文件,多次使用多次拷贝,造成冗余,使包变的更大
如.a、.lib都是静态库
3.动态库
动态库是指链接时不复制,程序运行时由系统加在到内存中,供系统调用,系统只需加载一次,多次使用,共用节省内存。
如.dylib、.framework都是动态库
系统的framework是动态的,开发者创建的framework是静态的
原文链接:https://juejin.im/post/5e4b7b01f265da57301bece8
回复列表