12.25
1、
1》静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多分冗余拷贝
动态库:链接时不复制,程序运行时由系统动态库加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存
2》静态库形式:.a .framework
3》ios动态库形式:.dylib .tbd .framework 所有.dylib和.tbd都属于动态库,.framework可能是动态库可能是静态库
4》framework为么既是静态库又是动态库:系统的.framework是动态库;我们自己建的.framework是静态库
5》.a和.framework的区别:
5.1》.a是一个纯二进制文件;.framework除了有二进制文件还有资源文件
5.2》.a不能直接使用,至少要有.h配合,.framework文件可以直接使用
.a + .h + sourceFile = .framework
2、静态库的特点:
1》使App二进制文件变大
2》使用时,需要手动导入静态库依赖的其他类库
3》导入静态库的应用可以减少对外界的依赖,如果导入的是三方动态库,动态库找不到会崩掉,例如 lib not found
4》静态库优点,减少耦合性,静态库中不能包含其他静态库,使用的时候要另外导入其依赖库,最大限度的保证每一个静态库都是独立的,不会重复引用
3、动态库特点:
动态库:.dylib和.tbd结尾的都是动态库
1》平时的系统库都放在ios系统中,在打包应用程序的时候这些库不会拷贝到程序中,当需要使用时会从ios系统中加载他们,因此,动态库也被称作共享库。编译时才载入的特性,可以随时对库进行替换,而不需要重新编译代码
2》这些库都是所有应用公用的
3》可以包含静态库,也能自动link所需要的依赖库
4》在导入动态库的时候需要在Embedded Binaries中导入,不然会报错:image not found
注意:我们自己做的动态库与系统动态库的区别:自己做的动态库需要embed进项目,也就是要拷贝到目标程序中,这就不太像动态库的特性了,苹果可能是基于安全考虑的
Framework既可以是静态库也可以是动态库,这取决于编译成的Mach-O
4、为什么要用库:
库(Library)其实就是一段编译好的的二进制代码,加上头文件就可以供别人使用,一般两种情况需要编成库:
1》代码需要给别人使用,但不希望别人看见源码,需要以库的形式封装,只暴露头文件
2》对于某些改动不太大的代码,例如很多大公司常用且很少变动的模块都会编译成库 1:节省编译时间。2:方便代码管理
因为库已经是编译好的二进制文件,所以编译的时候只需要link一下即可