文档章节

xCode - 静态库

hell03W
 hell03W
发布于 2016/01/31 21:56
字数 846
阅读 11
收藏 0
点赞 1
评论 0

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时一定注意版本

© 著作权归作者所有

共有 人打赏支持
hell03W
粉丝 9
博文 138
码字总数 108663
作品 0
朝阳
程序员
创建cocos2d-x静态库为Xcode编译提速

把以前写的一个帖子内容转到这里来,写得比较乱,有时间再整理整理。 cocos2d-x项目编译太慢太长一直很让人诟病,特别是Xcode中的archive,要是再出几次错,就忒折磨人了,小小研究了下把基础...

yoyoso ⋅ 2014/12/30 ⋅ 0

一个静态库框架模板: iOS Universal Framework Mk 7

一个静态库框架模板: iOS Universal Framework Mk 7 分类: iPhone开发2012-03-19 15:57 109人阅读 评论(0) 收藏 举报 项目地址: https://github.com/kstenerud/iOS-Universal-Framework 这......

晨曦之光 ⋅ 2012/05/28 ⋅ 0

iOS开发之Xcode打包framework

下文是转载,本人觉得这个打包framework还是一个比较重要的功能,可以用来做一下事情: (1)封装功能模块,比如有比较成熟的功能模块封装成一个包,然后以后自己或其他同事用起来比较方便。...

阿里阿力 ⋅ 2014/01/28 ⋅ 0

iOS 深入理解framework

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪 一、概念 1.framework(框架,其实相当于静态框架,不是动态库) 2.打包framework还是一个比较重要的功能,可以用来做一下事情: (1)封装功能...

石虎132 ⋅ 01/08 ⋅ 0

Xcode制作动态及静态Framework

有没有写SDK或者要将一些常用的工具类做成Framework的经历? 你或许自己写脚本完成了这项工作,相信也有很多的人使用 iOS-Universal-Framework ,随着Xcode 6的发布,相信小伙伴们已经都知道了...

余成海 ⋅ 2015/10/28 ⋅ 0

xcode合并模拟器和真机静态库的编译

最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的...

AmoyAI ⋅ 2013/03/02 ⋅ 1

【翻译】ios教程-创建静态库

作者:shede333 主页:http://my.oschina.net/shede333 版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 [Creative Commons BY-NC-ND 3.0][] --- 本人英语也不是太好,翻译质...

shede333 ⋅ 2013/09/26 ⋅ 6

xcode 制作静态库.a文件 详解

https://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Andro...

壹峰 ⋅ 05/10 ⋅ 0

iOS开发:xcode4中使用静态库和工作区

在xcode4中,为了将一些比较独立的功能封装起来,或者多人同时开发时,需要将程序打包成静态库,但在xcode4中设置工作区、工程和静态库等遇到了一系列问题,不知道是不是xcode的高版本中已经...

彭博 ⋅ 2012/03/05 ⋅ 0

iOS 封装静态库(.a文件)

iOS中导入外部文件,一种是将源码导入,一种是导入静态库,有很多第三方库都是以静态库的形式提供给我们使用的,如何制作一个静态库呢? 一、xCode创建文件时,选择创建静态库文件:cacoaTo...

珲少 ⋅ 2015/04/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 37分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 42分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部