block是封装了函数及执行上下文环境的对象。
block声明及使用语法
block本质是一个对象,那么我们肯定可以声明block类型
typedef 返回类型(^Block类型名称)(参数类型列表...);
//举例
typedef int(^BlockType)(int, int);
//声明一个block变量
BlockType block1;
直接声明一个block变量(不通过类型)
返回值类型 (^blockName)(参数类型列表...);
//举例
int (^block3)(int, int);
定义block的实现
^ 返回值 (参数列表...){
//block内部功能实现
};
其中,返回值可以省略,如果参数列表为空,那么参数列表也可以省略。
^ (参数列表){
//block内部功能实现
};
^ {
//block内部功能实现
};
#pragma makr - 简写
//完整写法
^int (int a, int b) {
if ( a >= b ) {
return a;
} else {
return b;
}
};
// 省略返回值
^(int a, int b) {
if ( a >= b ) {
return a;
} else {
return b;
}
};
// 省略返回值及参数
^ {
NSLog(@"block");
};
block作为参数类型
- (void)paramBlock:(int (^)(int, int))block {
if (block) {
block(4, 6);
}
}
block作为函数返回值
- (int(^)(int, int))returnBlock {
int (^maxBlock) (int , int) = ^(int a, int b) {
if ( a >= b ) {
return a;
} else {
return b;
}
};
return maxBlock;
}
如何理解并记忆block类型及block实现的语法呢?
block的定义,采用的是返回值 (^)(参数类型列表...)
的样式,这个是不是和函数指针(返回值 (*函数指针)(参数列表类型...))
的定义超级像呢?
block的实现,采用的是^ 返回值 (参数类型列表){ }
的样式。