1.链接方式:静态库在编译时被链接到目标程序中,而动态库在运行时被动态加载到内存中。静态库的代码被完整地复制到目标程序中,而动态库则是作为一个独立的文件被加载。
2.文件大小:静态库会增加目标程序的文件大小,因为它被完整地复制到目标程序中。而动态库在磁盘上只有一个副本,被多个应用程序共享,因此可以减小应用程序的文件大小。
3.运行时更新:动态库可以在运行时更新,当更新动态库时,所有使用该动态库的应用程序都可以受益,无需重新编译和分发整个应用程序。而静态库的更新需要重新编译和重新分发目标程序。
4.内存占用:由于动态库是在运行时加载到内存中的,所以多个应用程序可以共享同一个动态库实例,从而减少内存占用。而静态库的代码会被完整地复制到每个目标程序中,可能会导致内存占用增加。
5.依赖关系:使用动态库可以将共享的代码逻辑提取为一个独立的模块,多个应用程序可以共享使用。这样可以提高代码的复用性和维护性。而静态库的依赖关系会被直接编译到目标程序中,无法在运行时切换或更新
为什么要使用静态库?
方便共享代码,便于合理使用。
实现iOS程序的模块化。可以把固定的业务模块化成静态库。
和别人分享你的代码库,但不想让别人看到你代码的实现。
开发第三方sdk的需要。
但是这种静态库动态 Framework 和系统的 UIKit.Framework 还是有很大区别。系统的 Framework 不需要拷贝到目标程序中,我们自己做出来的 Framework 哪怕是动态的,最后也还是要拷贝到 App 中(App 和 Extension 的 Bundle 是共享的),因此苹果又把这种 Framework 称为 Embedded Framework(可植入性Framework)。