概念:Block就是一个函数体(匿名函数),它是ObjC对于闭包的实现,在块状中我们可以持有或引用局部变量
Block访问外部变量
1)Block内部可以访问外部变量;
2)默认情况下,Block内部不能修改外部的局部变量
3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。
1. 声明
返回类型 (^block函数名)(参数类型1 变量1, 参数类型2 变量2, ...);
void (^func)();
int (^add)(int, int);
int (^minus)(int, int);
2. 定义
typedef void(^KCButtonClick)(KCButton *);
@property (nonatomic,copy) KCButtonClick onClick;
int (^add)(int, int) = ^(int a, int b){
return a + b;
};
等同于
int (^add)(int, int);
add = ^(int num1, int num2){
return num1 + num2;
};
3. 实例/使用
void testBlock(){
//调用方式1:定义后直接调用
NSLog(@"add:%d", add(1,2));
//调用方式2:先声明,后定义后调用
minus = ^(int a, int b){
return a - b;
};
NSLog(@"minus:%d", minus(10, 6));
//调用方式3:不声明,直接调用匿名函数
NSLog(@"multi:%d", ^(int a, int b){
return a * b;
}(3,4));
}
4. 扩展typedef
声明:typedef 返回类型 (^block变量)(参数类型1, 参数类型2, ...);
举例:
typedef float (^Divide)(int, int);
//调用方式3:使用typedef 进行定义后调用
Divide div = ^(int a, int b){
return (float)a/b;
};
NSLog(@"div:%f", div(1,2));
网友评论