iOS-动态库 静态库简介

382 阅读2分钟

静态库和动态库

什么是库(Library)

  • Library是编译好的一段二进制文件,加上头文件就可以给其他人使用

为什么使用(Library)

  1. 打包成库,只暴露头文件可以给其他人使用,看不到源码实现
  2. 减少编译时间,打包成库之后,已经是编译好的二进制文件,编译的时候只需要link一下,减少编译时间
  3. 库在使用的时候需要连接连接的方式分为两种
    • 动态链接
    • 静态链接

库的文件格式

  • .a
  • .dylib
  • .framework
  • .xcframework

静态库

  1. 静态库就是静态链接库,是一堆目标文件的集合,就是很多文件打包压缩过之后的文件,window的.lib, Linux下的 .a .framwork

缺点:

  • 浪费内存和磁盘空间
  • 模块更新困难

动态库

  1. 动态库与静态库相反,动态库在编译的时候不会copy进目标程序中,目标程序只会存储指向动态库的引用,等程序真正的运行起来才会加载,常用的格式有,dylib .framework .tbd

缺点:

  • 性能会有一些损失,与静态库相比就是用空间换性能

优化:

  • 延迟绑定lazyBinding技术

tbd格式

  1. tbd本质是YAML描述的文本文件 (text-base-stub-libraries)
  2. 记录一些动态库的信息,包括一些导出的符号,动态库的架构信息,动态库的依赖信息
  3. 用于避免开发中真机调试中直接用到到传统的dylib
  4. 基与tbd格式的伪装的framework会大大减少xcode的大小

framework格式

  1. 是一种打包方式,将库的二进制文件,资源文件,头文件打包在一起方便管理分发
  2. framework和系统的framework差别还是很大,最后还是要copy到ipa目录下的frmework中
  3. 这种framework也可以成为Emebedded Framework
  4. 不同的App使用相同的动态库,并不会在系统中只保留一份而是会在各个app中各自打包,签名,加载一份

framework在app中的位置