类库:类库就是代码的集合,类库是给开发者共享代码使用的
类库分为: 静态库和动态库
静态库: .a和.framework
链接时,静态库中使用的文件会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝
动态库: .dylib和.framework(iOS9取消了.dylib,使用.tbd替代)
链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存
动态库相对来讲不安全,潜在注入攻击,所以项目中使用自定义动态库,不允许上传AppStore
- 生成.a类型的静态库:
创建工程时,在iOS下选择Framework&Library:
Cocoa Touch Static Library(.a)
Cocoa Touch Framework(.framework)
这里以.a为例:
创建好后默认只有一个.h和.m文件:
为了演示,在.h中声明一个简单的类方法,在.m中实现:
@interface JSLibrary : NSObject
+ (int)sumWithNumber1:(int)number1 andNumber2:(int)number2;
@end
#import "JSLibrary.h"
@implementation JSLibrary
+ (int)sumWithNumber1:(int)number1 andNumber2:(int)number2{
return number1 + number2;
}
@end
接下来,点击Product -->Build 构建.a文件(Command + B)
左侧Products下的项目生成物就是生成的.a静态库
(类库与架构相对应,这里先以模拟器架构类库为例演示,Scheme选择的是iPhone 6s,生成的类库只能给模拟器使用)
普通项目的构建过程:编译+链接 (这里只有编译,生成二进制文件)
Xcode 7.3以前即便是编译后,Products下显示的.a文件仍然为红色,实际文件已经生成,只是文件描述位置显示的路径为真机路径,所以无法直接Show In Finder找到文件
在Xcode菜单中点击Window --> Projects,在Derived Data后面点击箭头,就可以找到真实路径
这里使用的是Xcode 7.3.1 编译后,可以直接在左侧的.a文件上右键找到文件:
文件夹名称可以自己设置,这里只是为了演示,直接拖拽到项目中:
导入头文件即可使用:
#import "ViewController.h"
#import "JSLibrary.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
int sum = [JSLibrary sumWithNumber1:12 andNumber2:15];
NSLog(@"%d",sum);
}
@end
成功调用了类库中的方法,打印结果:
01-library静态库[45152:391425] 27