在ios中制作静态库之前,先来了解关于静态库的一些概念。
一、什么是库?
库是共享程序代码的方式,一般分为静态库和动态库。
静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。
二、库的类型
开源库
公开源代码,能看到具体实现
比如 SDWebImage 、 AFNetworking
闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库
三、iOS里静态库形式?
.a和.framework
四、iOS里动态库形式?
.dylib和.framework
五、framework为什么既是静态库又是动态库?
系统的.framework是动态库,我们自己建立的.framework是静态库。
六、a与.framework有什么区别?
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework。
建议用.framework.
七、为什么要使用静态库?
方便共享代码,便于合理使用。
实现iOS程序的模块化。可以把固定的业务模块化成静态库。
和别人分享你的代码库,但不想让别人看到你代码的实现。
开发第三方sdk的需要。
八、静态库和动态库在使用上的区别。
静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝 (下图示)

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存(下图示)

在实际的编程过程中,通常会把一些公用函数制成函数库,供其它程序使用,一则提搞了代码的复用;二则提搞了核心技术的保密程度。所以在实际的项目开发中,经常会使用到函数库,函数库分为静态库和动态库两种。
和多数人所熟悉的动态语言和静态语言一样,这里的所谓静态和动态是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。
下面介绍下关于.a静态库制作的基本流程
1.创建静态库

2.静态库中声明方法并实现(用于静态库使用的测试)

3.关于静态库的一些参数配置

4.静态库中需要暴露的头文件

5.分别使用模拟器和真机编译
编译模式设置为Release模式,原来的库文件由红色变为黑色,说明编译成功。



6.查看打包出来的文件状态
Show Finder查看库文件

7.合并真机和模拟器库文件
打开终端,进行以下操作
一、在终端输入:lipo -create
二、将release-iphonesimulator下的.a拖进终端,输入一个空格;
三、继续将release-iphoneos 下.a 拖进终端,输入空格;
四、继续输入:-output ,打个空格;
五、输入合并后的.a所要放的文件路径

8.查看静态库状态
一、在终端输入:lipo -info ;
二、将合并后的.a拖进终端 ,回车;
[图片上传中...(8.查看静态库状态.png-db2f76-1513126960067-0)]
至此,关于静态库制作完成。
接下来,介绍如何导入并使用刚刚打包好的静态库。
1.导入库文件

查看库文件,是否在引用库中

2.使用静态库

至此,全文关于.a静态库的制作和使用介绍完毕。
参考文章
手把手教你制作.a静态库
iOS开发中静态库制作 之.a静态库制作及使用篇
网友评论