Xcode_Static Library & Framework

  • 区别:
  1. 承载的内容范畴:
    (1) Static Library 'stætɪk 的产出物只是一个 .a 文件,为二进制执行文件。分享给别人的时候,头文件、静态资源文件需要另外提供。
    (2) Framework 'freɪm wɜːk 为 一站式分享方案,其实是一个文件夹,其中包含代码签名、头文件、二进制执行文件、静态资源文件等。
    (3) 总的来说,.a + .h + sourceFile = .framework。所以创建静态库最好还是用 .framework 的形式

  2. 头文件搜索路径的区别:StaticLibrary 需要设置头文件搜索路径,Framework 不需要。

  3. 当存在对外部代码库依赖的时候
    (1) StaticLibrary:能够只引用外部库的头文件,调用外部库的公开方法,而不引入其库实现,实现与引用库的分离部署。
    (2) Framework:要引用一个外部库,就必须要将此外部库的实现放入 Framework 内编译才可以。如果要想达到 StaticLibrary的效果,可以使用运行时方式调用。

  4. 运行环境 (对 3 的理解升级)
    (1) StaticLibrary:共享其运行环境,假如其运行环境中包含库中同一个类,会发生代码冲突,必须剥离其中一方的此类,然后共享此类。
    (2) Framework:与其运行环境隔离,假如其运行环境中包换库中同一个类,不会发生冲突,同名的两个类会在各自的环境中独立运行,互不干扰,哪怕是单例类。

  5. 综合 3 和 4,现总结在多方合作开发的时候,负责库实现的人员,如何选择使用 Framework 还是 StaticLibrary
    (1) 假如不想在同一个 App 中包含多份三方库(减小包大小),可以使用 StaticLibrary,库本身和 App 共享第三方库。但是产出物的结构可能会比较乱。
    (2) 假如不想考虑和 App 的代码冲突问题,库本身独立使用需要的库,想提供比较好的库结构,可以使用 Framework。但是假如库本身和 App 都使用了同一个三方库,会存在两份三方库,会增加包大小。



  • 静态库 ( .a文件 ) , 是一系列从源码编译的目标文件的集合,是源码的实现所对应的二进制。配合上公共的 .h 文件,可以获取到 .a 中暴露的方法或者成员变量,在最后编译 app 的时候 .a 将被链接到最终的可执行文件中,之后每次都随着 app 的可执行二进制文件一同加载

  • 在 iOS 8 之前,iOS 只支持以静态库的方式来使用第三方的代码 , 不允许第三方框架使用动态方式加载,

  • 从 iOS 8 开始 允许开发者 有条件地创建和使用动态框架,
    这种框架叫做 Cocoa Touch Framework。
    虽然同样是动态框架,但是和系统 framework 不同,
    苹果系统专属的 framework 是共享的(如UIKit),
    app 中 使用 Cocoa Touch Framework 制作的 动态库,
    在打包 和 提交 app 时会被放到 app main bundle 的根目录中,运行在沙盒里,而不是系统中。
    也就是说,不同的 app 就算使用了同样的 framework,但还是会有多份的框架被分别签名,打包和加载。
    不过 iOS 8 上开放了 App Extension 功能,可以为一个应用创建插件,这样主 app 和 插件之间共享动态库还是可行的。



  • 动态框架 ( Dynamic Framework )
    动态框架是以 .framework 结尾的。Framework 其实是一个 bundle,是一个特殊文件夹,系统的 framework 是存在于系统内部,而不会打包进 app 中,app 启动 的时候会检查所需要的动态框架是否已经加载。像 UIKit 之类的常用系统框架一般已经在内存中,就不需要再次加载,这可以保证 app 启动速度。相对静态库,framework 是自包含的,你不需要关心头文件位置等,使用起来很方便。

  • Library & Framework
    对比 静态库 和 动态框架,后者是有不少优势的
    首先,静态库不能包含像 xib 文件,图片这样的资源文件,其他开发者必须将它们复制到 app 的 main bundle 中才能使用,维护和更新非常困难,而 framework 则可以将资源文件包含在自己的 bundle 中。其次,静态库 必须打包到二进制文件中,你可能需要将同一个 .a 包含在 app 本体以及扩展的二进制文件中。这是不必要的重复
    最后,静态库只能随应用 binary 一起加载 , 而动态框架加载到内存后就不需要再次加载,二次启动速度加快。

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

推荐阅读更多精彩内容