库是程序代码的集合,是程序开发者与其他开发者之间进行代码共享的一种方式。库根据源代码的公开情况可以分为开源库和闭源库。开源库的源代码可见,比如afnetworking;闭源库的源代码不可见,是一段编译好的二进制代码。闭源库又根据相对编译时和运行时分为静态库和动态库。
一.动态库和静态库的区别。
- 格式区别:
静态库的格式:.a 和 .framework 。
动态库的格式:.dylib 和 .framework。其中,系统的.framework都是动态库。 - 使用上的区别:
前面说了,静态库和动态库的区别主要是根据编译时和运行时来区分的。
(1)静态库:在编译时会被拷贝到可执行文件中,使用多次就会被多次拷贝。但是编译完成之后,这个静态库也就没有什么作用了,这是他的优势。可同时它增加了可执行文件的体积,这也变成了它的劣势。
(2)动态库:在运行时由系统加载到内存,相同的动态库只加载一次,供多个程序调用,节省内存。在iOS8之前,自定义的动态库是不允许使用的。但是iOS8中,随着extension的出现,动态库才开始有用武之地。
二. 怎么分区一个库是动态库还是静态库?
-
其实,这种区分主要是针对.framework,因为.a肯定是静态库,.dylib肯定是动态库。区分静态库还是动态库需要通过命令行进行:
(1)cd xx.framework
(2)file xx 注释:xx为.framwork下的二进制文件
(3)判断:静态库包含“current ar archive random library”字样。动态库包含“dynamically linked shared library”字样
很明显,上面是一个静态库。 -
同时,我们可以在结果中可以看到三个iOS指令,这里在对iOS指令集做一个扩展。iOS指令集包含移动设备指令集和Mac指令集。
.移动设备指令集
(1)arm64(5s以上)
iphone机型:iphone Xs Max| iphone Xs | iphone XR | iphone X| iphone8s plus | iphone 8s | iphone8 plus | iphone8 | iphone7s plus | iphone7s | iphone6s plus | iphone 6s |iphone SE | iphone5s
ipad机型:iPad Pro | iPad Air2 | iPad Air
ipad mini机型:iPadmini2 | iPadmini3 | iPadmini4
(2)armv7s:(5,5c)
iphone机型:iPhone5|iPhone5C
ipad机型:iPad4(iPad with Retina Display)
iPad mini机型:无
(3)armv7:(4,4s)
iphone机型:iPhone4|iPhone4S
ipad机型:iPad|iPad2|iPad3(The New iPad)
iPad mini机型:iPad mini
.mac指令集
(1)i386(32位)
(2)x86_64(64位)