一、block基本语法(这里是语法,语法,语法!!!)
1、Block被称为"带有自动变量值的匿名函数",Block也是OC对象
2、与C语言相比,仅有两点不同
2.1、没有函数名
2.2、带有"^"
3、Block语法形式:
3.1、^ 返回值类型 (参数列表) {表达式}
eg:^int (int count){return count + 1;}
3.2、^ (参数列表) {表达式}
eg:^(int count){return count + 1;}
等价于:
^void (int count){return count + 1;}
省略返回值类型: 1、如果有return,就使用返回值类型
2、如果没有返回值,就使用void
3、有多个return,返回值类型必须相同
3.3、^ {表达式}
eg:^{NSLog(@"我是Block")};
等价于:
^void (void){NSLog(@"我是Block")};
二、Block类型变量(这是变量,变量,变量!!!)
Block类型变量类似于"函数指针"
1、定义形式
返回值类型(^Block名称)(参数类型) = ^返回值类型(参数列表) {表达式}
eg:int(^blk)(int) = ^int(int count){return count + 1;}
eg:int(^blk)(int,int) = ^(int count,int rate){return count + rate;}
2、typedef定义Block
typedef int (^blk_t)(int a);
3、可以当函数参数和函数的返回值
3.1、函数参数 (相当于是声明一个block类型变量)
- (void) fun: (int(^)(int)) blk
等价于:
- (void) fun: (blk_t) blk
3.2、函数返回值
- (int (^) int)fun
{
return ^(int count){return count + 1;}
}
等价于:
- (blk_t) fun
{
return ^(int count){return count + 1;}
}
三、