1.静态库简介
1.1.静态库的简介
库就是程序代码的集合,是共享程序代码的一种方式
1.2.库的分类
(1)开源库:公开源代码,能看到具体实现
(2)闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体实现;其中包括:静态库和动态库
1.3.静态库的存在形式
(1).a
(2).framework
1.4.动态库的存在形式
(1).dylib
(2).framework
1.5.静态库和动态库的区别
(1)静态库在链接时,会被完整的复制到可执行文件中,被多次使用,就有多份拷贝
(2)动态库则不会复制,只有一份,程序运行时动态加载到内存;系统只加载一次,多个程序公用,节省内存;
(3)!!!项目中如果使用到自己的动态库,不允许上架!!!,在iOS8开发了动态加载dylib的接口
1.6.静态库应用场景
(1)保护自己的核心代码,例如,国内的企业,掌握有核心技术,同时又希望更多的程序员来使用其技术,如,百度地图、友盟等
(2)将MRC的项目,打包成静态库,可以在ARC下直接使用,不需要转换
2.静态库的制作(.a)
2.1 生成静态库的步骤
(1)创建生成.a静态库的项目,如下图
(2)创建完后,如下图,添加一个log的方法
(3)选择模拟器或者Generic iOS Device, command + B,编辑,编译成功后,按照如下图的方式,查看生成的.a文件:
查看include文件,可以看到tool.h的文件,此时,如果在项目中添加一个类:Caclulate,添加一个方法 + (void)sum:(int)a b:(int)b;
如果直接编辑,那么在include文件中,不会出现Caclulate.h这个文件;
处理方式如下:
把Caclulate这个.h文件添加进入
上图中Subpath可以清空,编译后,如下图,Caclulate.h就有了:
生成的.a和.h拖入需要的工程,直接使用即可。
需要注意的一个细节是:
(1)如果生成静态库时,模拟器选择5的时候,编译,生成静态库;将.a + .h拖入需要的工程中后,运行时选择iphonXR时,就会报如下的错:
问题的原因是:
模拟器支持静态库的架构是不一样的,4s-5 的架构是i386,5s-iphoneXR支持的x86_64的架构;
真机支持静态库的架构如下,3gs-4s:armv7, 5/5c:armv7s(已弃用), 5s-iphoneXR: arm64;
查看静态库支付的架构的方法:
用终端,进入.a的文件夹,用lipo -info xxxx.a, 如下图: