iOS静、动态库
Link
库在使用的时候需要链接(Link),链接的方式有两种: 静态和动态
时机
1.安全:
某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进
行封装,只`暴露出头文件。
2.编译快:
对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成
库,因为库是已经编译好的二进制了,编译的时候只需要Link一下,不会浪费编
译时间。
3.对外使用
动静态库的混用
静态库 可以依赖 静态库
动态库 可以依赖 动态库
动态库 不能依赖 静态库
动态库不能依赖静态库是因为静态库不需要在运行时再次加载, 如果多个动态库
依赖同一个静态库, 会出现多个静态库的拷贝, 而这些拷贝本身只是对于内存空间
的消耗
静态库往前的依赖链上都只能是静态库
创建静态库1
直接通过new file 来选择静态库,创建即可静态库 .a 文件
创建静态库2
CocoaPods 中配置 Podfile
platform :ios, '10.0'
source 'https://cdn.cocoapods.org/'
target 'HLTest' do
pod 'AsyncSwift'
end
Podfile 默认配置创建的的就是静态库 .a 文件
创建动态库 1
cocoapods 提供了 use_frameworks! 选项让我们可以以 .framework 形式打
包,而且默认是动态库
platform :ios, '10.0'
source 'https://cdn.cocoapods.org/'
use_frameworks!
target 'HLTest' do
pod 'AsyncSwift'
end
创建静态库3
上面我们知道:
如果 podfile 里 开启了 use_frameworks! 那么全pod 引用库都默认是 动态库
.framework
.podspec 文件
我们可以修改.podspec 文件:
s.static_frameworks = true
设置后作为包含静态库的 .framework 文件 引入
静态库与动态库区别:
静态库:
链接时完整地拷贝至可执行文件中, 被多个依赖多次使用就会有多份冗余拷贝.
动态库:
链接时不复制, 程序运行时由系统动态加载到内存, 供程序调用, 系统只加载一次,
多个程序共用, 节省内存.(这个优点是针对系统动态库来说的, 比如
UIKit.framework),iOS对用户的动态库还是不能分享的
Embedded Framework
系统的 Framework 不需要拷贝到目标程序中, 我们自己做出来的 Framework
哪怕是动态的, 最后也还是要拷贝到 App 中, 因此苹果又把这种 Framework 称
为 Embedded Framework
xcframework