xCode - 静态库

1, 静态库的制作步骤

1.1 创建静态库项目

如下图所示, 新建静态库类型的项目.
 创建静态库项目

1.2 包含静态库头文件

将需要被外部知道的头文件包含在静态库中.
将头文件包含在静态库中

1.3 生成.a静态库

生成模拟器的.a文件.
生成模拟器.a
生成真机测试的.a文件.
生成真机.a

1.4 静态库的使用

在自己的项目中拖入静态库, 导入头文件, 调用方法即可.
使用静态库

2, 关于静态库的拓展

2.1 什么是库

库是一系列程序代码的集合, 是共享程序代码的一种方式.
根据代码的公开情况,可以分为两种类型:

  • 开源库:
    • 公开源代码, 可以看到功能的具体实现;
    • 如:AFNNetWorking, MBProgressHUD等等;
  • 闭源库:
    • 不公开源代码, 是经过编译后的二进制文件, 看不到具体的实现;
    • 主要分为: 静态库和动态库;

2.2 静态库和动态库

静态库和动态库的存在形式

  • 静态库: .a, .framework
  • 动态库: .dylib, .framework

静态库和动态库在使用上的区别

  • 链接时, 静态库会被完整的拷贝到可执行程序中, 如果多次使用就会出现多份冗余拷贝.
  • 动态库子啊链接时, 不复制, 程序在运行时由系统动态的加载到内存中, 供程序调用, 系统只加载一次, 多个程序可以共用, 更节省内存.
    • 如果项目中使用了自定义的动态库, 将不能上传到AppStore中去.

静态库链接示意图:
静态库示意图
动态库链接示意图:
动态库示意图

2.3 iPhone中模拟器和真机的cup架构

 i386 : iPhone模拟器 3gs->iPhone5
 x86_64 : iPhone模拟器 5s->6plus

 armv7 : iPhone 3gs->4s
 armv7s : iPhone 5->5c 
 arm64 : iPhone 5s->6splus
 注: lipo -info 静态库:查看该静态库支持哪些架构

2.4 生成支持所有架构的静态库

如图所示,当Debug和Release都改为时候, 会生成所有架构上的静态库, 并存放在一个.a文件中.
生成支持所有架构的静态库

2.5 静态库的版本

静态库文件的版本(4种)

1.真机-Debug版本
2.真机-Release版本
3.模拟器-Debug版本
4.模拟器-Release版本

调试版本(Debug版本) VS 发布版本(Release版本)

  • 调试版本会包含完整的符号信息,以方便调试
  • 调试版本不会对代码进行优化

  • 发布版本不会包含完整的符号信息

  • 发布版本的执行代码是进行过优化的
  • 发布版本的大小会比调试版本的略小
  • 在执行速度方面,调试版本会更快些,但不意味着会有显著的提升

生成Release版本的静态库
Build Configuration 设置为 Release之后, 就会生成所有四种静态库版本.
生成Release版本的静态库

生成四种静态库版本:
四种静态库版本

2.6 静态库的合并

检测.a的类型
$ lipo -info libCZTools.a

合并.a
lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a

合并.a的好处,开发过程中既可以在真机上调试,也可以在模拟器上调试
合并.a的坏处,如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的
今后在使用.a时一定注意版本
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值