静态库和动态库
基础概念
- 静态库和动态库的存在形式
- 静态库:
.a和.framework - 动态库:
.dylib和.framework
- 静态库:
静态库和动态库在使用上的
区别静态库:链接时,静态库会被完整地复制到可执行文件中,程序间
不能共用,被几个程序使用就有几份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序
共用,节省内存
注意:如果使用了自制的动态库,不能被上传到App Store
静态库
- 静态库的
作用- 封装
核心代码 - 将
MRC项目制作成静态库,在ARC环境中就不会报错了
- 封装
- 资源文件是
不能打包到静态库中的 - 静态库是分
模拟器版本和真机版本
静态库中资源包的使用
- 有些第三方库需要使用到一些图片资源,例如公司的logo等
- 在静态库中要使用图片资源可以利用bundle的手段来解决静态库资源与
mainBundle中的资源冲突的问题- 建立
bundle,并且向其中添加图片 - 创建一个
类方法,返回图片 - 编译生成静态库
- 调用方如果需要使用,需要导入
.h + .a + XXX.bundle
- 建立
静态库文件版本(4种)
- 真机-Debug版本
- 真机-Release版本
- 模拟器-Debug版本
- 模拟器-Release版本
静态库文件支持的系统架构
- 每一个设备都有属于自己的CPU架构(4s/6plus)
- 每一个静态库支持的架构是固定
模拟器架构- 4s ~ 5 :
i386 - 5s ~ 6plus :
x86_64
- 4s ~ 5 :
真机架构- 3gs ~ 4s :
armv7- 5/5c :
armv7s,静态库只要支持了armv7,就可以跑在armv7s的架构上 - 5s ~ 6plus :
arm64
- 5/5c :
- 3gs ~ 4s :
- 生成静态库文件
注意事项
静态库操作相关命令
- 查看
.a文件支持的系统架构:lipo -info xxx静态库 - 查看
更详细的信息:lipo -detailed_info xxx静态库 - 合并
.a文件,将真机文件和模拟器文件进行合并:lipo -create 静态库1 静态库2 -output 合并后的静态库- Debug-iphone
os/libStatic.a为真机对应的.a文件 - Debug-iphone
simulator/libStatic.a为模拟器对应的.a文件
- Debug-iphone
- 合并.a的
好处:开发过程中既可以在真机上使用,也可以在模拟器上使用 - 合并.a的
坏处:静态库太大,因此很多第三方的静态库的.a是区分版本的,所以使用前先查看.a文件支持的系统架构 - 支持64-bit后程序包会变大么?
开发中创建.a静态库的步骤
- 新建一个Single View Application
- 添加
.a静态库项目,步骤如下图:- 第一步:添加静态库项目

- 第二步:添加静态库项目后会产生以下文件

- 第三步:添加
要暴露的头文件
- 第四步:添加静态库文件

- 第一步:添加静态库项目
开发中创建.framework静态库的步骤
- 前面的步骤大致和
.a静态库文件差不多 这里说说
不同点默认情况下.framework是动态库类型
- 设置成静态库类型

- 生成的.framework静态库其实是一个
文件夹,其内部有一个Headers文件夹用于存放头文件
- 引用静态库,编译器会
自动添加.framework静态库文件
补充:动态库文件可以使用但是不能上架
- 查看.framework静态库所支持的系统架构
- .framework文件
本质是一个文件夹
- .framework文件
- 使用命令
查看或合并这里的文件即可,将合并后的文件替换.framework文件夹内对应的文件即可