1.Block是块语法,本质上是匿名函数(也就是没有函数名的方法)。它和函数指针类似。
2.Block定义
int (^myBlock)(int) = ^int(int num1){
return num1 + 2;
};
等号左边
int 代表Block的返回值类型
(^myBlock) ^是块标识符,后边是对象名称
(int) 是参数列表的类型,可以有多个参数,也可以为0个,里面为(void)
等号右边
^int 同样是标识符和返回值类型,此处的返回值类型可以省略
(int num1) 这里是参数列表的参数类型 和 参数名,这个地方必须有参数名
{ } 是Block的内部实现
; 最后以分号结尾
3.调用:Block对象,通过块对象名调用
调用上面的
int a = myBlock(7);
nslog(@"a = %d",a);
4.Block中按参数和返回值类型区分也有四种分配
(1)有参数无返回值
void (^mab)(int) = ^int(int num2) {
};
(2)无参数有返回值
int (^mab2)(void) = ^int(void) {
return 2;
};
nslog(@"b = %d",mab2()); // 当Block没有返回值的时候,调用这个block时也要加上();
(3)无参数无返回值
void (^mab3)(void) = ^void(void) {
nslog(@"这是一个无参数无返回值的block方法");
};
mab3();
(4)有参数有返回值
int (^mab4)(int) = ^int(int num3) {
return num3;
};
NSString *(^mab5)(NSString *) = ^NSString *(NSString *str) {
NSString *result = [str stringByAppendingString:@"你好"];
return result;
};
NSString *str1 = mab5(@"明天");
NSLog(@"str1 = %@",str1);
5.函数指针定义
int sum(int x,int y);
int sum(int x,int y){
return x + y;
}
typedef int(*SUM)(int x,int y);
调用
SUM p = sum;
int sum1 = p(2,3);
nslog(@"sum1 = %@",sum1);