iOS-动态库、静态库

编译

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


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 使用动态库
iOS动态库热更新
iOS 使用 Xcode8 制作动态库
iOS制作动态库



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

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

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

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


引用参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容