009-制作静态库
一、静态库
1.静态库和动态库的区别
1).a文件肯定是静态库,.dylib肯定是动态库,.framework可能是静态库也可能是动态库
2)静态库在链接时,会被完整的复制到可执行文件中,如果多个App都使用了同一个静态库,那么每个App都会拷贝一份,缺点是浪费内存。类似于定义一个基本变量,使用该基本变量是重新复制了一份数据,而不是原来定义的
3)动态库不会复制,只有一份,程序运行时动态加载到内存中,系统只会加载一次,多个程序共用一份,节约了内存。类似于使用变量的内存地址一样,使用的是同一个变量
4)项目中如果使用了自己定义的动态库,苹果是不允许上架的,在iOS8.0以后苹果开放了动态加载.dylib的接口,用于挂载.dylib动态库
2.静态库的运用场景
1)保护自己的核心代码,如讯飞语言摸索了好多年探索出的结果当然要保护起来了,都公开了公司还怎么生存
2)将MRC的项目打包成静态库,可以在ARC下直接使用,不用转换。如别人使用MRC写的开源库,放到自己ARC项目中,需要对每个文件加一个编译参数-fno-objc-arc,这样相对来说麻烦,将整个工程打包成静态库直接放到项目中即可,也不用对每个文件添加编译选项
3.静态库的特点
.a: 可以看做所有.m文件加密后的一个二进制文件
.h: 头文件用户暴漏可用的接口(方法)
4.制作步骤









导入到其他项目中使用的时候,将这个文件夹include和libFrank.a文件一起导入
5.合并静态库
静态库中的真机版本和模拟器版本是不能够通用的,只有通过合并才可以让一个静态库既支持真机,同时也支持模拟器
终端输入:lipo -create Debug-iphoneos/libFrank.a Debug-iphonesimulator/libFrank.a -output frank.a

注意:通常自己制作静态库给别人用一般是给两个发布版对应的模拟器和真机版本,不给合并版本,因为用户想合并可以自己进行合并,如果给用户一个合并版的,用户则无法分解的

浙公网安备 33010602011771号