静态库

作者: 闲得一B | 来源:发表于2016-03-18 16:38 被阅读96次

    一、什么是库?

    :就是程序代码的集合,是共享程序代码的一种方式


    库的分类开源库闭源库


    • 开源库:源代码公开,能看到具体代码实现 比如:AFNetworking、SDWebImage
    • 闭源库:源代码不公开,看不到具体实现,看到的是编译后的二进制文件

    二、闭源库

    闭源库: 静态库动态库


    静态库

    • 以 .a文件 .framework文件形式存在
    • 应用场景:保护核心代码,但同时希望更多程序员使用 如:友盟、百度地图
    • 注意:将MRC的项目,打包成静态库,可以直接在ARC下使用,不需要转换

    动态库

    • 以 .dylib 和.framework文件形式存在

    静态库动态库的区别:

    • 静态库在链接时,会被完整的复制到可执行文件中,被多次使用,就有多份拷贝;
    • 动态库则不会复制,只有一份,程序运行时动态加载到内存,系统只加载一次,多个程序共用,节省内存;
    • 但是项目中如果使用到自己的动态库,苹果不允许上架!
    • WWDC2014苹果iOS8开放动态dylib的接口,也就是开放了动态库挂载!

    三、创建静态库

    1、创建项目时,直接创建静态库.a或者.framework

    创建 .a或者 .frameWork静态库

    2、选择.a静态库:
    添加需要暴露的头文件,此时还没有真正生成静态库


    制作.a静态库步骤.png

    3、选择模拟器或者真机编译生成静态库
    command+B 编译生成 .a静态库 (libabc.a变色)


    真机、模拟器.png

    4、查看 .a静态库 、.framework静态库


    查看.a静态库、.framework静态库.png

    5、模拟器下的静态库和真机下的静态库不能共用:

    模拟器和真机CUP架构不一样,并且各个模拟器型号之间架构也不一样


    • 静态库文件架构:
      模拟器:
      iPhone 4s~5: i386
      iPhone 5S~6sPlus: x86_64
      真机:
      iPhone 3gs~4s:armv7
      iPhone 5~5c: armv7s(armv7兼容armv7s)
      iPhone5s~6sPlus: arm64
      如何查看静态库支持的架构:
      命令行窗口中(终端):lipo -info 库文件
      如何一次编译多个架构的.a静态库(能在多种架构下运行):表示让所有的框架都编译
      编译多个架构的.a静态库.png

    • 静态库文件的版本:
      调试版本: 真机Debug版本 和 模拟器Debug版本
      特点:
      1、调试版本会包含完整的符合信息
      2、方便调试
      3、不会对代码进行优化
      发布版本:真机Release版本 和 模拟器Release版本
      特点:
      1、发布版本不会包含完整的符合信息
      2、会对代码进行优化
      3、版本大小会比调试版本略小
      4、发布版本比调试版本执行速度’稍微‘有提升

    如何生存不同版本:
    项目->Edit Scheme-> Run -> Release/Debug 分别进行编译


    静态库编译版本.png
    静态库编译版本+.png

    6、如何生成一个静态库能在模拟器上和真机上都能运行?(因为支持框架不同,所以没法同时运行)

    • 首先需要生成真机版本模拟器版本
    • 将静态库合并(合并.a)
      合并步骤:
      终端命令: lipo -create 第一个.a库文件路径 第二个.a库文件路径 -output 合并.a库文件名
      合并优点:开发过程中可以在真机和模拟器上调试
      合并缺点:合并后库文件太大

    7、制作.framework库文件

    设置编译多个架构
    ![编译多个类型].png](https://img.haomeiwen.com/i1170347/f644dab6cc42c83f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    但是默认是动态库,需要设置连接类型 target -> BuildSetting->搜索Mach-o Type:改为静态库

    framework静态库连接类型.png

    8、.a静态库和.framework静态库的区别?

    • .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件
    • .a文件不能直接使用,至少要有.h文件配合;.framework文件可以直接使用
    • 相当于.a+.h+sourceFile = .framework
    • 建议使用.framework

    四、使用

    注意:首先查看使用的库文件支持的库文件架构

    • 导入库文件
    • 如果.a静态库文件记得拖入对应的.h文件

    相关文章

      网友评论

          本文标题:静态库

          本文链接:https://www.haomeiwen.com/subject/shzclttx.html