iOS-静态库和动态库(二)

538 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

通过问题看本质!!!

前文描述了什么动态库和静态库,接下来我们要了解的是静态库和动态库的体积大小,这也是我们最关心的问题。

静态库和动态库的体积区别

体积大小静态库动态库
相同代码打出来的体积(自身体积)同样的代码生成静态库文件体积大(.o文件的合集)= header + .o + 签名 + 资源文件同样的代码生成动态库文件体积小,类似只有一个.o文件=header+.dylb+.a+签名
相同代码的库对APP的体积可能比动态库小,因为使用静态库链接的时候,会通过一些参数来copy用到的代码,并不会把所有的代码都copy。在链接的时候,静态库文件和目标文件打包在一起的时候,macho内部也会用到内存对齐的规则。(-objc,-all_load ,-force_load等)链接器ld链接静态库的时候,默认只会链接用到的代码。-all_load ,-force_load 会copy所有的代码我们自己做出来的动态Framework 最后也还是要拷贝到 App 中。

手动创建的动态库和系统的动态库

自己创建的动态库系统的动态库
位置放在app bundle中,运行在沙盒中系统目录下
共享APP和APP Extension(iOS8)之间共享,iOS是运行在沙盒中的,不同程序之间不能共享代码多个程序之间共享
动态性部分动态性受到 iOS 平台限制(签名机制和沙盒机制限制)的动态库完全的动态性
大小(使用Embedded)内嵌一份到APP中编译的时候不会被copy到目标程序中,目标程序只会存储指向动态库的引用。