静态库和动态库

1、简介


  • 1、什么是库?
    • 库是程序代码的集合,是共享程序代码的一种方式
  • 2、库的分类
    • 开源库
      • 公开源代码,能够看到具体的实现
      • 比如 SBWebImageAFNetworkingCYStatusBarHUD等等
    • 闭源库
      • 不公开源代码,是经过编译后的二进制文件(一般是.a文件),看不到具体的实现
      • 主要分为:静态库、动态库

2、静态库和动态库


  • 静态库的存在形式

    • .a
    • .framework(被苹果官方逼出来的产物)
  • 动态库的存在形式

    • .framework
    • .dylib(苹果官方专用)
      需要注意的是
      以前,项目中如果使用了自制的动态库,不能被上传到AppStore
      从发布Xcode6开始,项目中已经可以使用自制的动态库,并上传到AppStore
  • 静态库和动态库在使用上的区别

    • 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
      静态库与动态库的区别01

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

3、制作.a


  • 选择“Cocoa Touch Static Library”
    使用.a文件
  • 输入静态库名称
    静态库名称
  • 添加库需要包含的源代码(直接将源代码添加到项目中)
  • 选择需要暴露出来的.h文件,.m文件会自动编译到.a文件中
    选择.h文件
    选择.h文件02
  • 选择真机设备,然后 Command+B 编译,libMJExtension.a文件从红色变为黑色
    真机设备、编译
  • 选择模拟器,依然 Command+B ,模拟器和真机环境下用的.a文件是分开的
    模拟器、编译
  • 右击“Show In Finder”,查看制作好的.a文件

    • Debug-iphoneos文件夹里面的东西是用在真机上的
    • Debug-iphonesimulator文件夹里面的东西是用在模拟器上的
    • 如果Scheme是Release模式,生成的文件夹就以Release开头
    如果想让一个.a文件能同时用在真机和模拟器上,需要进行合并
    在终端输入指令
    lipo -create Debug-iphoneos/libMJExtension.a Debug- iphonesimulator/libMJExtension.a -output libMJExtension.a
    .a文件的体积(一般情况下)
    真机用的.a > 模拟器用的.a
    所合成.a == 真机用的.a + 模拟器用的.a
    通过lipo –info libMJExtension.a可以查看 .a 的类型(模拟器还是真机)
  • 如何使用.a
    直接将.a、.h、资源文件拖拽到其他项目中即可
    使用.a文件
    使用.a文件02

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值