原文地址: juejin.cn/post/726255…
静态库:静态库是在编译阶段直接会包含到可执行文件中。所以说静态库会增加可执行文件的体积。
静态库伊以 .a.framework
结尾。
动态库:动态库是在编译阶段只会添加一些描述信息到可执行文件,然后在运行阶段再根据描述信息加载需要的库。
动态库共享:动态库共享的概念是针对系统级别的动态库,系统只在内存中存在一份,所有程序共用。
动态库以.dylib
或者 .framework
后缀结尾.
1 .podfile
文件中的 use_frameworks 理解
当使用 use_frameworks的时候 cocoapods会生成对应的 frameworks 文件(动态库) 在Link Binary With Libraries:会生成Pods_工程名.framework,包含了其它用cocoapods导入的第三方框架的.framework文件
当不使用use_frameworks!(静态库)cocoapods会生成相应的 .a文件(静态链接库) Link Binary With Libraries: libPods-工程名.a 包含了其他用cocoapods导入有第三库的 .a 文件
2 Xcode Embed
对于 系统动态库,可以将 Embed 属性设置成 Do Not Embed,因为 iOS 系统提供了相关的库,我们无需将它们再嵌入到应用程序的 ipa 包中,如:Foundation.framework、UIKit.framework。
对于 用户动态库,需要将 Embed 属性设置成 Embed,因为链接发生在运行时,链接器需要从应用程序的 ipa 包中加载完整的动态库。
对于 静态库,需要将 Embed 属性设置成 Do Not Embed,因为链接发生在编译时,编译完成后相关代码都已经包含在了应用程序的可执行文件中了,无需在应用程序的 bundle 中再保存一份。