objective-c 编程基础(3.8 block)

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才能修改

猜你喜欢

转载自blog.csdn.net/yx1166/article/details/79905557