静态库
库
什么是库?
- 库是程序代码的集合,是共享程序代码的一种方式
- 根据源代码的公开情况,库可以分为2种类型
- 开源库
- 公开源代码,能看到具体实现
比如SDWebImage、AFNetworking
- 公开源代码,能看到具体实现
- 闭源库
- 不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库
- 不公开源代码,是经过编译后的二进制文件,看不到具体实现
- 开源库
静态库和动态库
-
静态库和动态库的存在形式
- 静态库:.a和 .framework
- 动态库:.dylib和 .framework
-
静态库和动态库在使用上的区别
- 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝(左图所示)
-
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存(右图所示)
Snip20160529_4.png- 需要注意的是:
项目中如果使用了自制的动态库,不能被上传到AppStore
- 需要注意的是:
静态库
- 详细的介绍一下静态库
01. 为什么要做静态库
1> 国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用
例如:百度地图,友盟,JPush等
2> 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,也会提供静态库给程序员使用
02. 静态库的特点
.a + .h
03. 静态库简单演练
1> 新建Tools项目
2> 创建一个类方法,实现一个简单的加法
3> 编译
注意,在编译静态库时,需要编译两个版本 -> 真机(arm) | 模拟器(i386)
4> 新建项目将编译生成的.a + .h拖到项目中使用
04. 静态库中的资源包的使用
问题:有些第三方库会使用到一些图片素材,例如公司的logo等。
但是由于Xcode默认在编译时会把所有的素材文件导入到mainBundle中,为了避免与使用静态库的程序冲突。
在静态库中如果要使用图片素材,会利用bundle的手段
1> 建立bundle,并且向其中添加图片
2> 创建一个类方法,返回图片
3> 编译
4> 调用方如果需要使用,需要导入 .h + .a + XXX.bundle
05. 静态库中的自定义视图
问题:程序需要测试
静态库如何测试呢?
创建复合项目
1> 复习块代码传值
06. 静态库的使用
新建项目将编译生成的.a + .h拖到项目中使用
07. 静态库的种类
静态库文件的版本(4种)
1.真机-Debug版本
2.真机-Release版本
3.模拟器-Debug版本
4.模拟器-Release版本
-
调试版本 VS 发布版本
- 调试版本会包含完整的符号信息,以方便调试
- 调试版本不会对代码进行优化
- 发布版本不会包含完整的符号信息
- 发布版本的执行代码是进行过优化的
- 发布版本的大小会比调试版本的略小
- 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升
-
查看静态库支持什么架构
查看静态库支持什么架构 -
eg:查看百度模拟器静态库支持什么架构
百度模拟器静态库
百度真机静态库 -
配置如何生成支持多种架构的静态库
配置如何生成支持多种架构的静态库 -
配置生成Release版本的静态库
配置生成Release版本的静态库 -
常见问题
问题BUG
解决BUG
一般还需要配置 如图:
other link
-
总结
总结
补充:
-
如何在Xcode配置生成.framework的静态库
如何配置生成.framework的静态库
08. 静态库的合并
-
检测.a的类型
$ lipo -info libCZTools.a
-
合并.a
lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a