首先,我们要知道Block是什么,Block是对象,是一组指令。它可以使开发更便捷,还可以提升app的执行效率。
Block对象融合了面向过程编程和面向对象编程的特点。它是一段可执行的代码,可以接受参数,也是一个对象,对象的内容就是一段可执行的代码,可以接受参数。
声明Block对象变量
因为是对象,所以我们可以使用指针指向Block对象。指向block对象的变量和其他变量一样,都有变量名和类型。相对比较而言,block变量的类型包含更多的元素,所以声明的语法也不一样。
int(^blockName)(int a,int b);
这个声明了一个名为blockName的Block变量。该变量有两个参数int a和int b,返回值是int。声明Block变量的时候,我们可以省略实参的名字,注意只有声明的时候可以省略,也就是说我们也可以这样声明Block变量 int(^blockName)(int,int)。下面多写几个Block变量熟悉一下。
void (^aaaaa)(void);
void(^bbbbb)(User *);
NSString *(^ccccc)(NSString *);
创建Block对象
创建Block对象的代码如下:
^int(int x,int y){
return x+y;
};
这种Block的定义语法称为(Block Literal)。现在我们来了解一下语法规则,就如你刚才看到的那个实现代码一样。首先是^字符,然后是返回类型,再然后是用括号包起来的参数,再然后里面是用大括号包起来的代码,再然后是标志代码结束的;号。这样一个完整的Block对象就算结束了。
通常情况下,我们可以将新创建的Block对象立即赋值给某个Block变量。就像NSString * name = @“aaaa”;一样
int(^addBlock)(int ,int) = ^int(int x,int y){
return x+y;
};
使用Block对象
创建完Block之后就该使用了,当Block变量指向某个Block对象之后呢,我们可以像调用C函数那样调用Block变量。
例如调用上面我们声明的Block对象,可以这样写
int sum = addBlock(1,1);