iOS-动态库、静态库

编译

将人类可读的程序代码文本 --> 翻译成为 --> 计算机可以执行的二进制指令。
即:源程序 --> 翻译成为 --> 目标程序


库的分类

根据程序代码的开源情况,库可以分为两类

  • 「开源库」:源代码是公开的,你可以看到具体实现。GitHub上比较出名的第三方框架AFNetworking、SDWebImage、YYKit。
  • 「闭源库」: 不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库动态库


静态库和动态库的区别

1. 链接方式
静态库:在编译时链接到目标程序中,成为可执行文件的一部分。每个使用静态库的程序都会包含一份库的副本。
动态库:在运行时链接,多个程序可以共享同一个动态库,无需在每个程序中重复包含。

2. 文件格式
静态库:通常以.a或.framework(包含二进制文件和资源)形式存在。
动态库:通常以.dylib或.framework形式存在。

3. 内存占用
静态库:每个程序都包含库的副本,增加内存占用。
动态库:多个程序共享同一份库,减少内存占用。

4. 更新和维护
静态库:更新库需要重新编译整个程序。
动态库:更新库只需替换库文件,无需重新编译程序。

5. 加载时间
静态库:在程序启动时加载,可能增加启动时间。
动态库:在运行时加载,启动时间较短,但运行时可能会有延迟。

6. 兼容性
静态库:兼容性较好,因为库代码直接嵌入程序中。
动态库:需确保库版本与程序兼容,否则可能引发运行时错误。

7. iOS中的限制
静态库:iOS广泛支持静态库。
动态库:iOS对动态库的使用有较多限制,开发者通常使用系统提供的动态库。

总结:

静态库:适合小型项目或需要独立部署的场景。
动态库:适合大型项目或多个应用共享代码的场景。

App Store:不允许使用自定义动态库,能使用静态库。
非App Store分发:如企业分发或Test Flight,可以使用自定义动态库。


使用区别:
  • 静态库:是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,会被完整的复制到生成的可执行文件中,被多次使用就有多份拷贝。

优点:编译后即可使用,执行程序不需要外部函数库的支持,模块化,分工合作,代码反复使用,使用效率高。
缺点:如果静态函数库改变了,那么程序必须重新编译;被多次使用就会有多份冗余拷贝。

  • 动态库:动态库又称动态链接库英文为DLL,是Dynamic Link Library,不是可执行文件。动态链接提供了一种方法,使进程可以调用其中的可执行代码的函数。链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。其实动态库应该叫共享库。
优点:
  • 可以将最终可执行文件体积缩小。
  • 多个应用程序共享内存中得同一份库文件,节省资源
  • 可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。
  • 将整个应用程序分模块,团队合作,进行分工,影响比较小。
缺点:

程序运行时动态的申请并调用,使用效率低。

3.3 .a文件和.framework文件的区别?

  • .a是一个纯二进制文件,不能直接拿来使用,需要配合头文件、资源文件一起使用。
  • 将静态库打包的时候,只能打包代码文件;图片、json文件和xib等资源文件无法打包进去, 使用.a静态库的时候需要三个组成部分:.a文件+需要暴露的头文件+资源文件bundle;
  • .framework中除了有二进制文件之外还有资源文件,可以拿来直接使用。

引用
iOS 使用动态库
iOS动态库热更新
iOS 使用 Xcode8 制作动态库
iOS制作动态库



出于苹果的审核机制,现在极少有使用热更新开发的APP,在项目中也使用极少。出于对热更新的好奇,写了一个热更新的demo。如果你的项目不需要上架审核则可以使用热更新来更新APP。

苹果的热更新方案有许多种,这里使用的是苹果原始的Dynamic Library热更新。
动态库更新主要分为两部分:1、创建动态库;2、APP加载动态库。

这个方法为iOS原生的热更新方案实现方法,由于在iOS10之后的系统已经禁止将动态库放在沙盒中加载,如果需要使用热更新,此方法则不可用,可以在模拟器上测试使用,说不定以后苹果开放了热更新就又可以用了。在现有阶段除了系统提供的动态库的热更新,其他也有许多方案,但苹果审核一般比较难以通过,所以不建议使用。


引用参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容