ios-静态库和动态库

一、简单介绍

首先先说一下库的概念

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

一种是开源库,就比如说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文件更加的紧凑,更加的小。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值