• 动态库形式:.dylib和.framework
  • 静态库形式:.a和.framework

静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
image.png
静态库 动态库
系统动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

动态库的作用

应用插件化:
每一个功能点都是一个动态库,在用户想使用某个功能的时候让其从网络下载,然后手动加载动态库,实现功能的的插件化。虽然技术上来说这种动态更新是可行的,但是对于AppStore上上架的app是不可以的。iOS8之后虽然可以上传含有动态库的app,但是苹果不仅需要你动态库和app的签名一致,而且苹果会在你上架的时候再经过一次AppStore的签名。所以你想在线更新动态库,首先你得有苹果APPStore私钥,而这个基本不可能。
除非你的应用不需要通过AppStore上架,比如企业内部的应用,通过企业证书发布,那么就可以实现应用插件化在线更新动态库了。

共享可执行文件:
在其它大部分平台上,动态库都可以用于不同应用间共享,这就大大节省了内存。从目前来看,iOS仍然不允许进程间共享动态库,即iOS上的动态库只能是私有的,因为我们仍然不能将动态库文件放置在除了自身沙盒以外的其它任何地方。
不过iOS8上开放了App Extension功能,可以为一个应用创建插件,这样主app和插件之间共享动态库还是可行的。(还需了解下App Extension)