一、什么是库(framework)
库是程序代码的集合,是程序开发者与其他开发者之间进行代码共享的一种方式。
库根据源代码公开的情况可以:
- 开源库
- 开源库的源代码可见,比如afnetworking。
- 闭源库
- 闭源库的源代码不可见,是一段编译好的二进制代码
闭源库有根据相对编译时和运行时:
- 静态库
- 动态库
二、静态库和动态库区别
1、格式上的区别:
静态库的格式:
- .a
- .framework
动态库的格式:
- .dylib
- .framework
但是系统的.framework都是动态库
2、时间上区别
静态库:
- 编译时会被拷贝到可执行文件中
动态库:
- 运行时由系统加载到内存
3、使用上的区别:
静态库使用:
- 在编译时会被拷贝到可执行文件中,使用多次就会被多次拷贝。
优势:
- 编译完成之后,这个静态库也就没有什么作用了。
劣势:
- 增加了可执行文件的体积
动态库使用:
- 在运行时由系统加载到内存,相同的动态库只加载一次,供多个程序调用,节省内存。
在iOS8之前,自定义的动态库是不允许使用的。但是iOS8中,随着extension的出现,动态库才开始有用武之地。
三、怎么区分动态库和静态库
因为.a肯定是静态库,.dylib肯定是动态库,所以区分主要针对.feamework形式
1、通过命令行指令进行区分
- cd xx.framework
- file xx
xx为.framwork下的二进制文件
- 判断:静态库包含“current ar archive random library”字样. 动态库包含“dynamically linked shared library”字样
2、根据是否是系统的.framework
一般情况下:
系统的.framework都是动态库
非系统的都是.framework都是静态库