一、什么是库?
库
:就是程序代码的集合,是共享程序代码的一种方式
库的分类
:开源库
和闭源库
开源库
:源代码公开,能看到具体代码实现 比如:AFNetworking、SDWebImage
-
闭源库
:源代码不公开,看不到具体实现,看到的是编译后的二进制文件
二、闭源库
闭源库
:静态库
和动态库
静态库
:
- 以 .a文件 .framework文件形式存在
- 应用场景:保护核心代码,但同时希望更多程序员使用 如:友盟、百度地图
- 注意:将MRC的项目,打包成静态库,可以直接在ARC下使用,不需要转换
动态库
:
- 以 .dylib 和.framework文件形式存在
静态库
和动态库
的区别:
- 静态库在链接时,会被完整的复制到可执行文件中,被多次使用,就有多份拷贝;
- 动态库则不会复制,只有一份,程序运行时动态加载到内存,系统只加载一次,多个程序共用,节省内存;
- 但是项目中如果使用到自己的动态库,苹果不允许上架!
- WWDC2014苹果iOS8开放动态dylib的接口,也就是开放了动态库挂载!
三、创建静态库
1、创建项目时,直接创建静态库.a或者.framework
创建 .a或者 .frameWork静态库
2、选择.a静态库:
添加需要暴露的头文件,此时还没有真正生成静态库
制作.a静态库步骤.png
3、选择模拟器或者真机编译生成静态库
command+B 编译生成 .a静态库 (libabc.a变色)
真机、模拟器.png
4、查看 .a静态库 、.framework静态库
查看.a静态库、.framework静态库.png
5、模拟器下的静态库和真机下的静态库不能共用:
模拟器和真机CUP架构不一样,并且各个模拟器型号之间架构也不一样
- 静态库文件架构:
模拟器:
iPhone 4s~5: i386
iPhone 5S~6sPlus: x86_64
真机:
iPhone 3gs~4s:armv7
iPhone 5~5c: armv7s(armv7兼容armv7s)
iPhone5s~6sPlus: arm64
如何查看静态库支持的架构:
命令行窗口中(终端):lipo -info 库文件
如何一次编译多个架构的.a静态库(能在多种架构下运行):表示让所有的框架都编译
编译多个架构的.a静态库.png
- 静态库文件的版本:
调试版本: 真机Debug版本 和 模拟器Debug版本
特点:
1、调试版本会包含完整的符合信息
2、方便调试
3、不会对代码进行优化
发布版本:真机Release版本 和 模拟器Release版本
特点:
1、发布版本不会包含完整的符合信息
2、会对代码进行优化
3、版本大小会比调试版本略小
4、发布版本比调试版本执行速度’稍微‘有提升
如何生存不同版本:
项目->Edit Scheme-> Run -> Release/Debug 分别进行编译
静态库编译版本.png
静态库编译版本+.png
6、如何生成一个静态库能在模拟器上和真机上都能运行?(因为支持框架不同,所以没法同时运行)
- 首先需要生成
真机版本
和模拟器版本
- 将静态库合并(合并.a)
合并步骤:
终端命令: lipo -create 第一个.a库文件路径 第二个.a库文件路径 -output 合并.a库文件名
合并优点:开发过程中可以在真机和模拟器上调试
合并缺点:合并后库文件太大
7、制作.framework库文件
设置编译多个架构
framework静态库连接类型.png
![编译多个类型].png](https://img.haomeiwen.com/i1170347/f644dab6cc42c83f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
但是默认是动态库
,需要设置连接类型 target -> BuildSetting->搜索Mach-o Type:改为静态库
8、.a静态库和.framework静态库的区别?
- .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件
- .a文件不能直接使用,至少要有.h文件配合;.framework文件可以直接使用
- 相当于.a+.h+sourceFile = .framework
- 建议使用.framework
四、使用
注意:首先查看使用的库文件支持的
库文件架构
- 导入库文件
- 如果.a静态库文件记得拖入对应的.h文件
网友评论