什么是库?为什么使用库?
库就是程序代码的集合,将N个文件组织起来,是共享程序代码的一种方式。库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。一般分为静态库和动态库。
静态库:以.a 和 .framework为文件后缀名。
动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。(系统直接提供给我们的framework都是动态库!)
库实现了程序某个功能模块的模块化,它便于我们共享(公用)、维护、独立和安全。
库的分类
开源库:源代码是公开的,可以看到每个实现文件(.m文件)的实现,例如GitHub上的常用的开源库:AFNetworking、SDWebImage等;
闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体的实现。闭源库又分为:静态库和动态库
静态库和动态库有什么特点?
异同点:
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在
共同点:
静态库和动态库都是闭源库,只能拿来满足某个功能的使用,不会暴露内部具体的代码信息。
如何创建静态库?
创建完成后
我在.h和.m分别声明和实现了一个printData方法,同时可以看到libDemoLib.a是红色代表还未生成。这时候进行编译,要知道静态库编译后会分别生成模拟器和真机两个.a库文件。
编译完成后如下图:
可以看到,.a静态库已经生成了,看到文件中真机和模拟器分别各自对应的.a静态库。
我们这里可以把include下的DemoLib目录去掉,如下操作:
这里的+号我们可以添加其他创建的.h文件
这里创建了.a静态库后,我们可以通过命令来查看一下静态库支持哪些处理器
看到了模拟器下的静态库是x86_64,真机下的静态库是支持arm64的。
那如何把模拟器和真机的静态库合成一个呢?命令如下:
lipo -create libDemoLib.a libDemoLibS.a -output test.a
合成test.a,用命令查看一下是否已经合成:
OK,就是这么简单。