学习笔记,如有错误,欢迎批评指正!!!
静态库
静态库的存在形式:
xxx.a
和xxx.framework
注: 本文所写xxx.framework
均为静态库
静态库的制作流程(xxx.a)
xxx.a静态库的制作
-
打开Xcode,创建项目时,直接选择创建静态库,如下图:
-
开始编写静态库里边的代码,.h中的方法是需要提供给外界调用的
-
然后编译,编译之后,找到
xxx.a
所在的位置 -
至此,静态库就创建好了
-
注意
,有一个问题,自定义创建的类的头文件没有编译出来,此时,我们需要手动将自定义的类的.h文件给暴露出来,targets
-->Build phases
-->Copy Files
,将需要暴露的头文件添加进来即可 。 -
再次编译,查看目录
-
我们可以在终端通过:
lipo -info xxx.a
命令查看 支持的架构 -
接下来我们就可以在项目中使用我们自己创建的静态库了
我们是在 模拟器环境下 编译生成的静态库,所以只支持模拟器运行,真机不能运行。我们也可以切换到真机环境下进行编译生成。
还可以生成 Release版本的静态库。
Edit scheme
-->Run
-->Release
真机和模拟器环境下分别编译之后:
Debug版本和Release版本的区别
- Debug版本
- Debug版本会包含完整的符号信息,以方便调试
- Debug版本不会对代码进行优化
- Release版本
- Release版本不会包含完整的符号信息
- Release版本的代码是经过优化的
- Release版本的静态库大小会比Debug版本的略小
- 在执行速度方面,Release版本会稍微更快一些
如何生成支持不同架构的静态库?
答:静态库合并
终端命令:
lipo -create xxx.a xxx.a -output xxx.a
拿上面生成的真机和模拟器的静态库为例:Release版本的
-
先分别查看支持的架构,如图所示:
-
合并两个静态库:
-
查看合并之后的静态库支持的架构:
合并静态库的优缺点
- 优点:开发过程中既可以在真机上调试,也可以在模拟器上调试
- 缺点:如果静态库太大,合并打包后的静态库和更大
静态库的制作流程(xxx.framework)
==步骤==
-
新建项目,选择.framework静态库
- 设置编译所有架构,
Build Setting
-->Build Active Architecture Only
, 改成NO
-
注意
,默认制作的xxx.framework
是动态库,需要改成 静态库。Build Setting
-->Mach-O Type
, 改成Static Library
。 -
注意:将需要暴露的头文件暴露出来
- 编译,查看编译好的
xxx.framework
- 查看是不是静态库类型:终端命令
file xxx.framework
- 接下来,复制到项目中,测试自己生成的
xxx.framework
静态库xxx.a
和 静态库xxx.framework
的区别
-
xxx.a
是一个纯二进制文件,.framework
中除了有二进制文件之外还有资源文件 -
.a
文件不能直接使用,至少要有.h
文件的配合;.framework
文件可以直接使用