美文网首页
静态库 & 动态库

静态库 & 动态库

作者: 英雄出少年 | 来源:发表于2021-02-07 19:43 被阅读0次
    什么是库?

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

    库的分类?
    • 开源库
      公开源代码, 能看到具体实现。例如MJExtension, MJRefresh, AFNetworking...
    • 闭源库
      不公开源代码, 是经过编译后的二进制文件, 看不到具体实现。主要分为: 静态库 和 动态库
    静态库

    静态库格式
    .a 、.framework

    静态库应用场景

    • 保护自己的核心代码
    • 将MRC的项目,打包成静态库, 可以在ARC下直接使用, 不需要转换
    • 提高工程的编译速度

    静态库的特点?

    • .a + .h
    • 看不到具体实现的代码

    静态库的制作(.a)

    1. 创建项目时, 直接选择StaticLibrary
    2. 设置需要暴漏的头文件 ➡️ TARGETS ➡️ Build Phases ➡️ Copy Files 把需要暴漏的头文件添加进来即可
    3. 在模拟器环境下编译(得到模拟器环境下的静态库)
    4. 在真机环境下编译(得到真机环境下的静态库)
    5. 一次编译支持多个架构的的静态库  ➡️ Build Settings -> Build Active -> NO 
    
    // 查看不同机型cpu架构信息
    lipo -info 库文件路径 
    
    // 合并静态库
    lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a
    
    //拆分指定架构的库
    lipo -thin 架构名称 库路径 -output 目标路径
    
    //从合成库移除某个架构
    lipo -remove 架构名称 库路径 -output xx
    
    //查看库信息
    file 库路径
    

    静态库制作(.framework)

     1.新建工程, 直接选择framework
     2.一次编译支持多个架构的的静态库  ➡️ Build Settings -> Build Active -> NO 
    3.默认制作的是动态库, 需要设置链接类型  target -> Build Settings-> 搜索 Mach-o Type ; 改为静态库
    4.暴露头文件 TARGETS ➡️  Build Phases ➡️  header ➡️ 从project里拖到public里
                
    
    .a静态库和.framework静态库的区别?
    • .a是一个纯二进制文件, .framework中除了有二进制文件之外还有资源文件
    • .a文件不能直接使用, 至少要有.h文件的配合; .framework文件可以直接使用
    • .a + .h + sourceFile = .framework
    动态库

    动态库格式
    .framework 、.dylib 、 .tbd

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

    相关文章

      网友评论

          本文标题:静态库 & 动态库

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