静态库
形式:.a 和.framework
动态库形式:.dylib和.framework
区分:
静态库:连接时会被完整复制到可执行文件中,被多次使用就浪费内存
动态库:连接时不复制直接由系统动态加载到内存,只加载一次,多个程序使用,节省内存,but项目中使用自制的动态库是不被允许上传到AppStore
应用:
1、核心代码封装成一个静态库,别人只需要知道怎么使用就可以
2、使用到第三方时,如果是个MRC的情况,你可以直接将项目配合转换成MRC,但是这样出错的几率会提高。如果直接转换成静态库就不需要管是MRC还是ARC
创建:
1>.a形式的静态库
有单独的方式创建也可以直接在工程中创建,以下步骤在工程中直接创建:


第二步:

添加完成后,还是对工程运行或者编译,会报错,原因:还没有引入库

再次编译,还是报错,且报错是包含x86-64等,选中你的静态库对其进行模拟器编译,然后在将Debug改为NO

注意:如果你默认创建的静态库.h和.m文件删除再创建的话,那么就需要手动添加头文件,否则没有头文件暴露出去,如图所示这样添加

补充:在静态库中添加图片资源,创建一个.bundle文件夹,将其拖入到其中就可以,在使用的时候这样调用:
NSString*path = [[NSBundlemainBundle]pathForResource:@"pic.png"ofType:nilinDirectory:@"myResource.bundle"];
UIImage*image = [UIImageimageWithContentsOfFile:path];
2>.framework形式下的静态库
同样,也可以单独创建,也可以工程中创建,一下是单独创建的步骤:
第一步:如图,创建后自己创建了一个Tool类,然后将系统自己创建的.h和m文件删除,再在如图中所示,找到headers将Project中的Tool.h移到Public,这样就能暴露你的.h文件给别人使用

但是在这种情况下创建的framework系统默认是动态库,可以看到:所以选中static Library就可以了,再进行编译

第二步:使用,选中show in Finder,将那个白色的盒子拖过去就可以使用

第三步:编译发现报错,有问题,只是拖入,并未使用也报错,在你的framework中的Debug改下NO,然后再删除之前的重新拖入

补充:如果你一开始就是动态库拖入的话,编译报错的时候也可可以直接引入他的二进制文件,如下图:在其中添加即可
