iOS小知识 -- 静态库(一)

  • 静态库
    • 静态库的介绍
    • .a静态库的制作以及测试
    • 静态库的架构问题
    • .framework静态库的制作以及测试
    • 边开发边制作静态库

简介

  • 什么是库
    库是程序代码的集合,是共享代码的一种方式
  • 根据源代码的公开情况,库可以分为两类
    • 开源库
      • 公开源代码,能看到具体的实现
    • 闭源库:
      • 不公开源代码,是经过编译后的二进制文件,看不到具体的实现
  • 静态库和动态库的存在形式:
    • 静态库: .a和. framework
    • 动态库:.dylib和. framework
  • 静态库和动态库在使用上的区别
    • 静态库:链接时,静态库会被完整地复制到可执行地文件中,被多次使用就有多次冗余拷贝
    • 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省
      内存
    • 注意:项目中如果使用了自制的动态库,不能上传到AppStore
  • 应用场景
    • 静态库的应用场景(一)
      • 百度地图想开发者在应用程序中集成百度地图
      • 但是百度不想公开自己的技术实现,如何完成呢?
      • 百度将自己的核心代码编译成静态库,对外暴露统一的接口
      • 开发者集成静态库,并且调用静态库即可集成
    • 静态库的应用场景(二)
      • 公司项目开发的一部分代码为核心代码


        iOS小知识 -- 静态库(一)_第1张图片
        1.png

编译.a/.framework静态库

  • 创建项目的时,选择Framework&Library


    iOS小知识 -- 静态库(一)_第2张图片
    2.png
    • 创建.a静态库
      iOS小知识 -- 静态库(一)_第3张图片
      3.png

      如图所示建一个文件,然后实现.h.m,当当前是在模拟器上下是command+bproducts文件夹生成的.a是在模拟器上使用的,当选的是真机,command+bproducts文件夹生成的.a是在真机上使用的
      iOS小知识 -- 静态库(一)_第4张图片
      4.png

      点击加号把所有暴露的文件添加进去再command+b,到此静态库创建完成。可以放到工程里进行使用了。
      iOS小知识 -- 静态库(一)_第5张图片
      5.png

      show in find 查看当前的库,使用时把库和暴露的接口文件拖进去,然后调用即可

静态库的架构

  • 设备的cpu架构
    • 不同的设备使用的cpu是不同的
    • cpu的不同造成使用的cpu架构(指令集)不同
  • 静态库有其支持的cpu架构
    • 如果静态库在不支持的cpu架构上运行就会报错
  • 模拟器使用的cpu架构
    • iphone4s - iphone5:i386
    • iphone5s - iphone6splus:x86_64
  • 真机使用的cpu架构
    • iphone3gs - iphone4s:armv7
    • iphone5 - iphone5c: armv7s
    • iphone5s - iphone6plus:arm64
    • 唯一特殊:只支持armv7的静态库可以在armv7s上正常运行
  • 查看静态库支持的架构
    • 进入静态库所在的文件夹,然后执行lipo -info 静态库的名字


      iOS小知识 -- 静态库(一)_第6张图片
      7.png
  • 假如当前的只能运行在模拟器或真机静态库不能支持所有设备的架构,可以采用如下方法:


    iOS小知识 -- 静态库(一)_第7张图片
    8.png
  • 合并静态库(可支持真机和模拟器)
    • lipo -create 静态库1 静态库2 -output合并的静态库


      iOS小知识 -- 静态库(一)_第8张图片
      9.png

提示:当项目上线时推荐使用只支持真机的静态库,如果两者都支持,那样会造成包太大了

(欢迎大家对不合适的地方进行指正,看完觉得有帮到你给点个赞吧)

你可能感兴趣的:(iOS小知识 -- 静态库(一))