前言:
做ios开发经常会碰到各类的SDK,其中我们经常看到类似***.a的文件。这个就是封装好的库文件,那么它是如何制作出来的?又发何使用呢?
知识点:
一、库
所谓库,就是封装好的程序代码。其中又分为开源库和闭源库。
开源库就是公开源代码,能看到代码的具体细节,可修改。例如:SDWebimage、AFNetworking等。闭源库就是不公开源代码,无法看到源代码,不可修改,只能使用。闭源库又分:静态库、动态库
(1) 静态库
.a和.framework形式存在。
(2) 动态库
.dylib和.framework形式存在。
使用区分:
静态库在链接时就会被完整地复制到可执行文件,多次使用就多次复制,造成代码冗余
动态库在链接时不会进行复制,而是由程序运行时系统动态加载到内存,供程序调用,只加载一次,节省内存
注意:项目中若有自制动态库,不能被上传到AppStore。
制作过程:
1:建立项目,如下图所示
Xcode建立工程,选择IOS下的Famework&Library其中选择Cocoa Touch Static Library
2:项目结构如下图所示
这时我们好像已经看到了一个libTestLib.a的文件,为什么是红色的呢?这就做好了吗?当然没有制作好了,红色是因为没有进行编译。
3:代码功能实现
添加相应的功能代码;
这里注意.h文件中也要写好方法定义。如下图所示
4:工程配置
确保所需代码添加到编译列表中。
5:编译工程
确保工程,在release模式。
选择Edit Scheme进行设置。
真机编译设置,如下图所示
模拟器编译设置,如下图所示
编译(Command+B)或如下图所示
6:文件合并
经过上面的编译工作,我们发现libtestLib.a文件变成了黑色。文件夹中查看,如下图:
Release-iphoneos 文件夹里面的东西是用在真机上的
Release-iphonesimulator 文件夹里面的东西是用在模拟器上的
将两个文件夹复制到桌面新建文件夹tt中,打开终端执行合并操作
合并代码:
Lipo –create/Users/drb/Desktop/tt/Release-iphoneos/libTestLib.a /Users/drb/Desktop/tt/Release-iphonesimulator/libTestLib.a -output /Users/drb/Desktop/tt/testlib.a
查看信息代码:
lipo -info/Users/drb/Desktop/tt/testlib.a
格式(注意空格):
lipo-create 真机下的.a路径(空格)模拟器下的.a路径(空格) -output (空格)合成后的路径及名称
查看信息时,如下图所示内容很重要
到此静态库制作完成。
使用过程
1:如下图所示,将制作好的testlib.a文件和TestLib.h文件添加到工程中
添加调用代码:
//静态库调用测试
TestLib * testlib = [[TestLiballoc]init];
[testlib HelloLib];
运行程序,我们会看到调用成功了! 输出信息:”hellolib test!”