1.1什么是block?
Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数。
“带有自动变量”在Blocks中表现为“截取自动变量"
“匿名函数”就是“不带名称的函数”
块,封装了函数调用及调用环境的OC对象
- block的声明
// 1.
@property (nonatomic, copy) void(^myBlock1)(void);
// 2.BlockType:类型别名
typedef void(^BlockType)(void);
@property (nonatomic, copy) BlockType myBlock2;
// 3.
// 返回值类型(^block变量名)(参数1类型,参数2类型,...)
void(^block)(void);
- block的定义
// ^返回值类型(参数1,参数2,...){};
// 1.无返回值,无参数
void(^block1)(void) = ^{
};
// 2.无返回值,有参数
void(^block2)(int) = ^(int a){
};
// 3.有返回值,无参数(不管有没有返回值,定义的返回值类型都可以省略)
int(^block3)(void) = ^int{
return 3;
};
// 以上Block的定义也可以这样写:
int(^block4)(void) = ^{
return 3;
};
// 4.有返回值,有参数
int(^block5)(int) = ^int(int a){
return 3 * a;
};
- block的调用
// 1.无返回值,无参数
block1();
// 2.有返回值,有参数
int a = block5(2);