block,块。
定义
block是一个代码段。主要有3方面的作用:
- 保存一段代码,当作函数调用。
- 主要用来做回调。
- 除了可执行代码外,还可以包含变量。
格式
double (^multi) (double,double) = ^(double a, double b) {
return a * b;
};
double:返回值类型,如果没有返回值则为void
(^multi):块定义需要有一个^标记,multi是块名称
(double,double):参数类型列表,如果没有参数则为void
^(double a, double b):以^开头的参数列表,如果没有则为void,也可以省略
{}:block体,相当于函数体
在实际使用中,可以使用typedef定义block。如下图所示:
typedef double(^CalBlock) (double,double);
CalBlock multi2 = multi;//相同返回值和参数类型的block就是同一类型block,可以直接赋值
CalBlock add = ^(double a,double b) {
return a + b;
};
使用
使用block主要有3种用途:
- 直接当作函数使用
- 当作普通变量使用
- 作为函数的参数
访问和修改变量
- block可以访问全局变量和局部变量
- block默认不能修改变量,需要将变量声明为_block才能修改