静态库

-ObjC这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。

-all_load这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是-force_load后面必须跟一个只想静态库的路径。

注意1:静态库并不会将资源打包进入,如果静态库中用到了其他资源,必须手动的导入

开发技巧 不建议直接导入资源

可以在终端上借助lipo -info 静态库文件地址这个指令查看当前静态库支持的平台

可以使用这个指令将模拟器的静态库与真机的静态库进行合并 :lipo -creat 需要合并的静态库1 需要合并的静态库2 -output 合并之后的文件名称该方式同样可以把模拟器的framework与真机的framework合并

注意2:虽然将真机和模拟器的静态库合并在一起之后,以后我们就不用关心当前是允许真机还是模拟器了,但是程序在发布的时候建议使用真机的静态库,因为文件小,便于编译

注意3:如果要在当前工程中开发静态库,需要配置targets > build Phases > target Dependenies > Link Binary WithLibraries

静态库文件的版本(4种)

1.真机-Debug版本 调试的版本

2.真机-Release版本 发布的版本

3.模拟器-Debug版本

4.模拟器-Release版本

调试版本VS发布版本

-调试版本会包含完整的符号信息,以方便调试

-调试版本不会对代码进行优化

-发布版本不会包含完整的符号信息

-发布版本的执行代码是进行过优化的

-发布版本的大小会比调试版本的略小

-在执行速度方面,发布版本会更快些,但不意味着会有显著的提升

如果使用framework是直接根据对应的模板生成的,默认情况下是生成的动态库而不是静态库 会报这样的错误: Reason: image not found,这是Xcode6之后才有的也就是说明了直接根据对应的模板生成的framework,在Xcode6以下的编译器无法使用

下图为动静态库的添加位置


你可能感兴趣的:(静态库)