ios-静态库和动态库

来源:互联网 发布:c语言三种循环结构 编辑:程序博客网 时间:2024/06/05 16:31

首先先说一下库的概念

库在这里其实就是程序代码的一个集合,当然库也可以存放其他的文件,比如说图片,库如果按照公开的情况进行划分的话,可以分成两种类型

一种是开源库,就比如说GitHub上的那些第三方框架,可以看到具体实现的,有.h和.m文件的

另外一种是闭源库,不公开源代码,是经过编译后的二进制文件,看不到具体的实现的,只有.h文件,.m文件是看不见的。就比如说百度地图SDK中的一些静态库就是这样子的,只有.h文件可见,.m文件就是编译后的二进制数据。

然后闭源库又主要分为静态库和动态库

静态库的存在形式是.a和.framework

动态库的存在形式是 .tbd和.framework,之前.tbd又称为.dylib

静态库和动态库的主要区别就是在于

静态库:在链接时会被完整的复制到可执行文件中,被多次使用就会进行多次的拷贝,也就是说你有10个项目就要拷贝10次,静态库与 app 可执行文件 一起被加载到同一块代码区中。

动态库:链接的时候是不复制,动态库的代码是在可执行程序运行时才会被载入内存的,在编译过程中仅简单的引用,因此代码体积较小。系统只加载一次,多个程序会共用,在ios中也需要系统的支持。

摘抄下一些网络上的字段

对于动态库而言,在编译链接的时候,只会将动态库被引用的头文件添加到目标 app 可执行文件,区别于静态库,动态库 是在程序运行的时候被添加另外一块内存区域。

.a文件和.framework文件组成的区别:
.a文件是一个纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。.a文件如下所示


将静态库打包的时候,只能打包代码资源,但是图片文件、本地json文件和xib等资源文件无法打包进去,我们去使用.a静态库一般来说还需要一些其他的文件 .a文件和头文件和一些资源文件.framework文件内部除了有二进制文件,还有一些其他的一些资源文件啊,图片啊,头文件之类的如下图所示。


还有需要注意的是苹果不让使用自己的动态库,上架会被拒。

这里还需要注意的是经过资料的收集,.dylib和.tbd文件的区别在于在stackOverFlow下面这么一段话

For those who are curious, the .tbd files are new "text-based stub libraries", that provide a much more compact version of the stub libraries for use in the SDK, and help to significantly reduce its download size.

可能大概的意思就是,这个.tbd文件比.dylib文件更加的紧凑,更加的小。


原创粉丝点击