ipa 中的Frameworks文件夹
这里的全部都是动态库
xcode项目中的库
target列表中的图标
- 小圆圈:未在build settings中指明类型库
- 小房子:build setting中指明是静态库
- 公文包:
新建target时的动态、静态
Framework那个就是动态的
如何查看一个库是动态库,还是静态库
- .a一定是静态库
- . file 命令
file XXXXX
// 可能的结果
XXXXXX (for architecture arm64): current ar archive // 静态库
XXXXXX (for architecture arm64): ... dynamically linked shared library arm64 // 动态库
动态库和静态库的区别如下
格式区别
首先静态库和动态库都是以二进制提供代码复用的代码库
- 静态库 常见的是 .a
- 动态库常见的是 .dll(windows),.dylib(mac),so(linux)
- framework(in Apple): Framework 是Cocoa/Cocoa Touch程序中使用的一种资源打包方式,可以将代码文件、头文件、资源文件、说明文档等集中在一起,方便开发者使用。也就是说我们的 framework其实是资源打包的方式,和静态库动态库的本质是没有关系的
组成区别
- 静态库: 一堆目标文件(.o/.obj)的打包体(并非二进制文件)
- 动态库: 一个没有main函数的可执行文件
使用区别
| 动态库 | 静态库 | |
|---|---|---|
| 命名空间 | 有单独的命名空间,不同库同名文件不会冲突 使用import<XXX/xxx.h>的方式引入 | 没有单独命名空间,同名文件冲突 引入方式import"xxx.h" |
| 加载时机 | 在启动时加载,加载时间较长 | 构建时加载 |
| 依赖关系 | 可以依赖动态库,不能依赖静态库 | 可以依赖动态库和静态库 |
| 是否能使用swift | 可以包含swift文件 | 在cocoapods1.4.0之后,可以使用use_framework!的方式包含swift文件 framework支持static_framework |
编译链接区别
参考链接: