静态库(.a)生成和使用 - 1 (Obj-C)

类库:类库就是代码的集合,类库是给开发者共享代码使用的

类库分为: 静态库和动态库

静态库: .a和.framework
链接时,静态库中使用的文件会被完整的复制到可执行文件中,被多次使用就有多分冗余拷贝

动态库: .dylib和.framework(iOS9取消了.dylib,使用.tbd替代)
链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序公用,节省内存

动态库相对来讲不安全,潜在注入攻击,所以项目中使用自定义动态库,不允许上传AppStore

  • 生成.a类型的静态库:

创建工程时,在iOS下选择Framework&Library:
Cocoa Touch Static Library(.a)
Cocoa Touch Framework(.framework)
这里以.a为例:

静态库(.a)生成和使用 - 1 (Obj-C)_第1张图片
Library_1.png

创建好后默认只有一个.h和.m文件:

静态库(.a)生成和使用 - 1 (Obj-C)_第2张图片
Library_2.png

为了演示,在.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后面点击箭头,就可以找到真实路径

静态库(.a)生成和使用 - 1 (Obj-C)_第3张图片
Library_3.png

这里使用的是Xcode 7.3.1 编译后,可以直接在左侧的.a文件上右键找到文件:

Library_4.png

文件夹名称可以自己设置,这里只是为了演示,直接拖拽到项目中:

静态库(.a)生成和使用 - 1 (Obj-C)_第4张图片
Library_5.png

导入头文件即可使用:

#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

你可能感兴趣的:(静态库(.a)生成和使用 - 1 (Obj-C))