xCode - 静态库
博客专区 > hell03W 的博客 > 博客详情
xCode - 静态库
hell03W 发表于2年前
xCode - 静态库
  • 发表于 2年前
  • 阅读 8
  • 收藏 0
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 静态库的制作步骤和注意事项

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时一定注意版本
共有 人打赏支持
粉丝 7
博文 132
码字总数 99375
×
hell03W
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: