闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库
静态库:.a和 .framework
动态库:.dylib和 .framework.a 和 .framework(静态)有什么区别
.a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用
.a +.h + sourceFile = .framework静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存供程序调用,系统只加载一次,多个程序共用,节省内存(项目中如果含有个人创建的动态库,则会被拒)
静态库文件的版本
真机【Debug】版本 和 【Release】版本
模拟器【Debug】版本 和 【Release】版本
Debug版本
含完整的符号信息,以方便调试,不会对代码进行优化Release版本
不会包含完整的符号信息,它的执行代码是进行过优化的,它的大小比Debug版本小,在执行速度方面,Release版本更快(一般采用 Release版本)制作静态库 - .a & Debug版
1.新建静态库 并且 命名
2.将打包为静态库的代码放入的.m文件中
在.h文件中暴露接口给外界,并将.h文件添加在copy file中
在Command + b编译即可
注意:
静态库有 模拟器 和 真机 版本,分别选择真机和模拟器编译后即会有这两种静态库
Build Active Architecture Only 是控制编译CPU架构的,我们需要在Debug中将其打开,YES表示只编译选中模拟器对应的版本,NO则是表示编译所有版本。
终端查看静态库支持的CPU架构: lipo -info xxx.a
当静态库需要同时支持真机和模拟器,可以对静态库进行合并, 终端中使用以下命令:
lipo -create Debug-iphoneos/静态库名称.a Debug-iphonesimulator/静态库名称.a -output 合并后的名称.a
补充:
- 把资源打成静态库时,若里面包含category文件,出现错误(selector not recognized)运行时找不到该方法错误。需要在 build setting 的 other linker flag 标示符里面添加 -ObjC
- 静态的暴露的.h 文件多时,可直接在静态库的内部创建一个.h文件,把所有要暴露的.h文件放在这个.h中,最后把这个.h 文件暴露出来即可