静态库和动态库
什么是库?
- 库是程序代码的集合,是共享程序代码的一种方式。
- 根据源代码的公开情况,库可分为2种类型。
开源库
公开源代码,能看到具体实现。
比如一些开源库:SDWebImage、AFNetworking。
闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体实现。
主要分为:静态库、动态库。
静态库和动态库的存在形式
- 静态库:**.a** 和 .framework
- 动态库:**.dylib** 和 .framework
静态库和动态库在使用上的区别
- 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝。
- 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
CPU 架构
- 每一个设备都有属于自己的 CPU 架构。
- 每一个静态支持的架构是固定的。
- 查看静态库支持的架构:
lipo -info xxxx.a
。 - 模拟器 CPU 架构:i386、x86_64。
- 真机 CPU 架构:armv7、armv7s(静态库只要支持了 armv7,就可以跑在 armv7s 的架构上)、arm64。
支持所有架构的编译方法
TARGETS → Build Settings → Architecture → Build Action Architecture only → 全部选择NO
为什么要做静态库?
- 国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用”闭源”的方式开发使用
例如:百度地图,友盟,JPush等。 - 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,也会提供静态库给程序员使用。
静态库文件的版本(4种)
真机-Debug版本
真机-Release版本
模拟器-Debug版本
模拟器-Release版本
调试版本 VS 发布版本
调试版本会包含完整的符号信息,以方便调试。
调试版本不会对代码进行优化。
发布版本不会包含完整的符号信息。
发布版本的执行代码是进行过优化的。
发布版本的大小会比调试版本的略小。
在执行速度方面,发布版本会更快些,但不意味着会有显著的提升。
静态库的合并
1 | 检测.a的架构类型 |