iOS开发-你不了解的库(一)

6 篇文章 0 订阅
5 篇文章 0 订阅

本文涉及的知识点:

  • 动态库&静态库的基本概念
  • 动态库&静态库的区别&加载方式

  • 库是程序代码的集合,将多个文件组织起来。是共享程序代码的一种方式。
  • 本质上:库是一段编译好的二进制代码,可以被载入内存中使用。使用库的时候需要对库的代码进行 Link ,而 Link 有两种方式:静态和动态,从而产生了静态链接库和动态链接库的概念

动态库

  • .tbd 或者 .framework 为文件后缀名(Xcode7 之前 是 .dylib
  • 动态库在编译时不会被 copy 进目标文件中,而是在程序运行过程中要使用时,被 dyld 加载进内存。(通过在目标文件中设置正确的 rpath 来找到动态库并使用)
  • 系统的 Framework 是动态库,可以被其他应用共享,比如 Foundation.framework/UIKit.framework ,自己创建的动态库,打包上传 app store 时保留在沙盒中,所以是不支持共享的。不过,iOS8 上开放了 App Extension 功能,可以为一个应用创建插件,这样主 app 和插件之间共享动态库还是可行的。
  • dyld 加载动态库时,会检查 framework 的签名,签名中必须包含 TeamIdentifier,并且 framework 和 宿主 appTeamIdentifier 必须一致。
  • App 中与动态库可以存在相同代码,不会产生冲突(对于动态库,编译器只会打个标机,并不会链接。链接会推迟到使用时,彼此保持独立)

优点:

  • 不需要拷贝库代码到目标程序中,不会增大目标程序的体积
  • 多个应用程序共享内存中得同一份库文件,节省资源(系统库,自定义的库可以与 App Extension 共享)
  • 整个应用程序分模块,团队合作
  • 应用插件化
  • 可以动态更新应用程序,模块实时升级

缺点:

  • 载入时消耗性能;验证签名,载入内存都会大量消耗性能
  • 动态更新库文件,上架 App store 会被拒绝
  • 配置繁琐,需要适配各个 cpu 架构

静态库

  • .a 或者 .framework 为文件后缀。
  • .a 是一个纯二进制文件, .framework 中除了二进制文件外,还有资源文件
  • 它的链接方式是在编译时就 copy 一份代码到目标文件中,这段代码就不会再变动。在 build 过程中参与链接,合并到目标文件中
  • 链接时:链接器只会将静态库中被使用的部分合并到可执行文件中去

优点:

  • 模块化,分工合作
  • 避免了大量的重复编译操作,提高编译速度
  • 大大提高打包速度
  • 代码的保密(像常用的 SDK :比如高德、微信、Jpush 等都用的是静态包)
  • 提高代码的复用率
  • 不需要外部的函数库支持

缺点:

  • 目标文件过大
  • 库文件抽取复杂,耗时耗力
  • 库文件修改后,需重新编译使用
  • 调试难度变大,无法断点
参考链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值