首先库是什么呢?
库可执行代码的二进制,可以被操作系统写入内存。
库分为静态库和动态库,他们有什么区别呢?
静态库在iOS中存在.a、.lib、framework等,动态库的存在形式为framework、dylib等。
静态库在链接阶段,链接在一起组成了最后的可执行文件,下图为编译过程;
动态库是在程序运行的的时候,根据需求动态的进行加载;系统的UIKit框架都是动态库。
下面我们来探索库的加载过程,我们再app的启动函数main函数打断点后,可以看到在main函数前面的调用堆栈情况,如下图
image.png
通过上面图片可以看到,在main函数前,调用了start函数。而这个start函数位于libdyld.dylib中,我们从openSource找到libdyld.dylib的源码进行研究。
网友评论