iOS开发之静态库.a 以及合并
静态库和动态库
静态库和动态库的存在形式
静态库: .a 和 .framework
动态库: .dylib 和 .framework
静态库和动态库在使用上的区别
静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存
制作 .a
新建项目-> 选择 “Cocoa Touch Static Library”
就在.h文件中,写入功能函数!简单的直接写入1个方法,并实现方法,例子是把输入的字符串打印两边
#import <Foundation/Foundation.h> @interface MyStaticLibraryDM : NSObject //将输入的字符串打印两边 -(void)printMyInput:(NSString*)inputString; @end
#import "MyStaticLibraryDM.h" @implementation MyStaticLibraryDM -(void)printMyInput:(NSString*)inputString{ NSLog(@"inputString === %@ twice is ==== %@",inputString,inputString); } @end
然后,调试代码无误后,就可以进行编译了
编译静态库
注意:需要修改Build Settings中的 Build Active Architecture Only 以满足运行不同CPU环境的模拟器。 将此设置为NO。
在不同编译环境下编译会生成四种静态库,debug模拟器,debug真机,release模拟器,release真机,我们需要将运行环境调至不同的状态并生成如上四种形式的静态库。这里只以一种情况为例:
设置是Debug还是release
选择Edit Scheme--> Buid Configuration设置为release
设置模拟器还是真机
就是设置模拟器还是真机,因为之前我们将只编译当前环境设置为NO,所以编译出来的静态库会支持各种CPU环境。
最后按住 command+b 编译!
你会发现你的静态库文件从红色变成了黑色,这就是编译完成了啊。可以 show in finder 查看文件所在位置。
上面是我在不同环境运行之后的结果
Debug-iphoneos 文件夹里面的东西是用在真机上的
Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的
其他是在Release模式环境生成的
如果想让一个 .a 文件能同时用在真机和模拟器上,需要进行合并
在终端输入指令
lipo -create 静态库1 静态库2 -output 新静态库名称.a
localhost:~ micaimanong$ cd /Users/micaimanong/Library/Developer/Xcode/DerivedData/MyStaticLibraryDM-fczwjaefnkvdmjelggxccgpicgwy/Build/Products
localhost:Products micaimanong$ lipo -create Debug-iphoneos/libMyStaticLibraryDM.a Debug-iphonesimulator/libMyStaticLibraryDM.a -output libMyStaticLibraryDM.a
先进入products 在将其中的两个合并 合并之后生成一个新的.a文件
如下图所示 libMyStaticLibraryDM.a 支持模拟器和真机
最后就是引用了
之后引用文件并实现方法
打印如下 将输入的字符串打印了两边
如果遇到下面的问题
原因是你导入错误的编译版本。
以上错误,是你的库文件(.a)为真机版本,你却用模拟器来调试程序。将调试目标换成真机,或者使用合并之后的(.a)文件也可以解决。
操作时会遇到很多问题,具体问题具体对待。
posted on 2017-03-02 10:50 Left-knife 阅读(3373) 评论(0) 编辑 收藏 举报