简介
iOS中,库有两种:静态库和动态库,静态库分为.a和.framework,动态库分为.dylib和.framework。其区别在于:链接静态库的时候,静态库会被完整地复制到可执行文件中,被多次使用就会被多次复制;而链接动态库的时候,动态库不会被复制,程序运行的时候,系统会将库动态加载到内存中,供程序调用,且只加载一次,多个程序共用,节省内存空间。
需要注意的是,iOS系统不允许使用自定义动态库,如果项目中使用到了自定义动态库,那么是不可上传到AppStore的。
本文仅就静态库的开发与调试做简要笔记,便于翻阅查询。
静态库的开发与调试
静态库分为.a和.framework两种形式,本文选取.framework的开发来做记录。
1.使用xcode新建项目,项目模板使用Framework&Library中的Cocoa Touch Framework,本文库项目命名为“LVLibrary”如下图所示:
2.如果不需要系统默认生成的头文件,删除即可。新建LVLibrary类,继承自NSObject,添加一个拼接字符串的测试方法
+ (NSString *)joinString:(NSArray *)arr withSeparator:(NSString *)separator{
if (arr.count == 0) {
return nil;
}
NSMutableString * mStr = [[NSMutableString alloc] init];
for (int i = 0; i < arr.count; i++) {
[mStr appendString:arr[i]];
if (separator && (i != arr.count - 1)) {
[mStr appendString:separator];
}
}
return mStr;
}
3.修改模板类型。使用该模板新建的项目,生成的库默认的是动态库,需要修改。找到“Build Settings -> Linking -> Mack-O Type”将值由“Dynamic Library”修改为“Static Library”,如下图所示:
4.暴露头文件。一个库中可能会包含很多个类,根据需要将头文件暴露出去。找到“Build Phases -> Headers”, 设置头文件。默认情况下,所有的头文件都是在Project中,将需要暴露的头文件,从Project拖动到Public即可。
至此,库工程的相关配置完毕。
接下来,就是在项目进行调试了。
1.新建项目,本文选取Single View App,命名为LVLibraryDemo。
2.关闭库工程(LVLibrary),然后将库的工程文件“LVLibrary.xcodeproj”,拖动到测试项目LVLibraryDemo中。
添加完毕后,如果发现在测试工程中,库工程没法展开,也就是上图中红框左侧没有小三角,是因为库工程(LVLibrary)没有关闭,将之关闭即可。
3.配置测试工程。找到测试工程的Target Dependencies和Link Binary With Libraries,添加“LVLibrary”,如下图:
4.修改搜索路径。配置完上面的选项后,如果开始使用库,可能会找不到头文件的错误,这时需要添加搜索路径,将库的头文件的路径加入到“Header Search Paths”中(可以将库文件的某个头文件直接拖动过去,然后参数文件名,保留到最有一个文件夹即可),并且将路径的搜索模式修改为recursive。
至此,就可以在项目中开发调试静态库了。