美文网首页
iOS-动态库、静态库

iOS-动态库、静态库

作者: lukyy | 来源:发表于2021-11-23 08:34 被阅读0次

    编译

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

    1、什么是库?

    所谓库就是程序代码的集合,是共享程序代码的一种方式。

    2、库的分类

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

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

    3、静态库和动态库的存在形式和使用区别

    3.1、存在形式:

    • 静态库 以".a"或者“.framework”为文件后缀名 (windows: .lib , linux: .a)
    • 动态库 以".dylib"或者“.framework”为文件后缀名(Xcode7 之后 .tbd 代替了 .dylib)
    • (自己打包的framework是静态库;系统提供给我们的framework都是动态库!)(windows:.dll , linux: .so)

    3.2、使用区别:

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

    优点:编译后即可使用,执行程序不需要外部函数库的支持,模块化,分工合作,代码反复使用,使用效率高。

    缺点:如果静态函数库改变了,那么程序必须重新编译;被多次使用就会有多份冗余拷贝。

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

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

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

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

    ------------------------------注意------------------------------

    引用

    iOS使用动态库(注意:提交App Store会被拒绝)
    iOS 使用动态库
    iOS动态库热更新
    iOS 使用 Xcode8 制作动态库
    iOS制作动态库



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

    苹果的热更新方案有许多种,这里使用的是苹果原始的Dynamic Library热更新。

    动态库更新主要分为两部分:1、创建动态库;2、APP加载动态库。

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

    引用参考:

    相关文章

      网友评论

          本文标题:iOS-动态库、静态库

          本文链接:https://www.haomeiwen.com/subject/nlaitrtx.html