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