1.什么是静态库
- 什么是库
库是程序代码的集合,是共享程序代码的一种方式。
闭源库是不公开源代码,经过编译后的二进制文件。主要分为:静态库和动态库。 - 静态库与动态库的区别:
- 静态库:.a 和 .framework。链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝 (左图所示)
- 动态库:.dylib 和 .framework。链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。项目中如果使用了自制的动态库,不能被上传到 AppStore
2.创建
新建Workspace:选择 File -> New -> Workspace , 名称填入 DemoLibrary.xcworkspace.
新建Project:选择 File -> New -> Project
选择Framework & Library > Cocoa Touch Static Library
新建成功后,工程的结构如下:
3.编码实现
最初工程中有DemoLib.h和DemoLib.m文件,添加具体的实现函数。例如,在DemoLib.h中:
- (float) caculateAverage:(float)a and:(float)b;
在DemoLib.m中:
- (float) caculateAverage:(float)a and:(float)b
{
return (a+b)/2;
}
选择Target DemoLib > Build Phases > Headers,若Build Phases中没有Headers项,则点击”+”,选择New Headers Phase。
将DemoLib.h拖到Headers的Public栏中:
4.生成
保存编码和操作后:选择真机设备,然后Product > Build,会生成libDemoLib.a,并将它和DemoLib.h复制到Build目录下。选择模拟器,Product > Build ,生成模拟器使用的libDemoLib.a。
选中生成的.a文件,然后右键点击出来的菜单中选择“Show in Finder“,直接打开.a文件坐在文件夹。其中Debug-iphoneos只用于真机,Debug-iphonesimulator适用于模拟器。如果 Scheme 是Release 模式,生成的文件夹就以 Release 开头
如果想让一个 .a 文件能同时用在真机和模拟器上,需要进行合并
在终端输入指令:
lipo -create Debug-iphoneos/libDemoLib.a Debug-iphonesimulator/libDemoLib.a -output libDemoLib.a
合并后.a的大小等于之前两个.a大小之和。
查看.a的类型:
lipo –info libMJRefresh.a
5.使用
在需要使用静态库的工程中加入.a和相应的.h文件,如果库还包含其他资源文件,也需要加进来。在需要使用的文件中import库的头文件即可。