一、静态库和动态库
1.静态库
后缀是.a和.framework的文件
在使用的时候,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝。
优点:
1.模块化,分工合作
2.避免少量改动经常导致大量的重复编译连接
3.也可以重用,注意不是共享使用
2.动态库
后缀是.dylib 和 .framework(当然现在在导入第三方的时候会找不到.dylib文件,而是用.tbd代替了,.tbd的实质其实就是.dylib)
在使用的时候,由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
优点:
1.可以将最终可执行文件体积缩小
2.多个应用程序共享内存中得同一份库文件,节省资源
3.可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
当然有一点需要注意的是
项目中如果使用了自制的动态库,不能被上传到AppStore
3.a与.framework的区别
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
建议用.framework.
二、静态库的制作(.framework)
1.新建一个framework库 2.添加需要打包的文件 3.添加打包到静态库中的.m文件和需要暴露出来的.h文件 4.分别选择模拟器和真机运行一次 5.在finder中查看这个文件 6.这是release下的真机和模拟器的静态库,BHImage是二进制文件,Headders包含的是头文件(字有点丑。。)Paste_Image.png到这里其实静态库都已经做好了,但是这个是分开的。真机的就用真机下的,模拟器就用模拟器下的。所以我们需要把它们合并在一起:
在终端输入指令:
lipo -create 真机下的二进制文件路径(BHImage) 模拟器下的二进制文件路径(BHImage) -output 合并生成输出的文件路径
最后把合成好的二进制文件放入.framework中。
网友评论