静态库和动态库

基础概念

  • 静态库和动态库的存在形式
    • 静态库:.a.framework
    • 动态库:.dylib.framework
  • 静态库和动态库在使用上的区别

    • 静态库:链接时,静态库会被完整地复制到可执行文件中,程序间不能共用,被几个程序使用就有几份冗余拷贝

    • 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

  • 注意:如果使用了自制的动态库不能被上传到App Store

静态库

  • 静态库的作用
    • 封装核心代码
    • MRC项目制作成静态库,在ARC环境中就不会报错了
  • 资源文件是不能打包到静态库中的
  • 静态库是分 模拟器版本真机版本

静态库中资源包的使用

  • 有些第三方库需要使用到一些图片资源,例如公司的logo等
  • 在静态库中要使用图片资源可以利用bundle的手段来解决静态库资源与mainBundle中的资源冲突的问题
    • 建立bundle,并且向其中添加图片
    • 创建一个类方法,返回图片
    • 编译生成静态库
    • 调用方如果需要使用,需要导入 .h + .a + XXX.bundle

静态库文件版本(4种)

  • 真机-Debug版本
  • 真机-Release版本
  • 模拟器-Debug版本
  • 模拟器-Release版本

静态库文件支持的系统架构

  • 每一个设备都有属于自己的CPU架构(4s/6plus)
  • 每一个静态库支持的架构是固定
  • 模拟器架构
    • 4s ~ 5 : i386
    • 5s ~ 6plus : x86_64
  • 真机架构
    • 3gs ~ 4s : armv7
      • 5/5c : armv7s,静态库只要支持了armv7,就可以跑在armv7s的架构上
      • 5s ~ 6plus : arm64
  • 生成静态库文件注意事项

静态库操作相关命令

  • 查看.a文件支持的系统架构:lipo -info xxx静态库
  • 查看更详细的信息:lipo -detailed_info xxx静态库
  • 合并.a文件,将真机文件和模拟器文件进行合并:lipo -create 静态库1 静态库2 -output 合并后的静态库
    • Debug-iphoneos/libStatic.a为真机对应的.a文件
    • Debug-iphonesimulator/libStatic.a为模拟器对应的.a文件
  • 合并.a的好处:开发过程中既可以在真机上使用,也可以在模拟器上使用
  • 合并.a的坏处:静态库太大,因此很多第三方的静态库的.a是区分版本的,所以使用前先查看.a文件支持的系统架构
  • 支持64-bit后程序包会变大么?

开发中创建.a静态库的步骤

  • 新建一个Single View Application
  • 添加.a静态库项目,步骤如下图:
    • 第一步:添加静态库项目
    • 第二步:添加静态库项目后会产生以下文件
    • 第三步:添加要暴露的头文件
    • 第四步:添加静态库文件

开发中创建.framework静态库的步骤

  • 前面的步骤大致和.a静态库文件差不多
  • 这里说说不同点

    • 默认情况下.framework是动态库类型

    • 设置成静态库类型
    • 生成的.framework静态库其实是一个文件夹,其内部有一个Headers文件夹用于存放头文件
    • 引用静态库,编译器会自动添加.framework静态库文件
    • 补充:动态库文件可以使用但是不能上架
  • 查看.framework静态库所支持的系统架构
    • .framework文件本质是一个文件夹
  • 使用命令查看合并这里的文件即可,将合并后的文件替换.framework文件夹内对应的文件即可

results matching ""

    No results matching ""