戴远的IT博客 首页 阅读

简单介绍blocks

blocks是带有局部变量的匿名函数。所谓匿名函数,就是不带有函数名称的函数。

blocks的定义


// 第一种
^ int(int a) {

};

// 第二种,省略返回值
^(int a) {

};

// 第三种,如果没有输入参数
^{

};

blocks的申明


int(^blk)(int);
void(^blk)();

用typedef定义blocks

typedef int(^blk_t)(int);
blk_t blk = ^(int count) { return count + 1;};

截获变量值

int main() {
  int val = 10;

  void (^blk)(void) = ^{ printf("%d",val); };

  val = 2;

  blk();

  return 0;
}

输出结果是10,而不是2. 原因就在于在代码级别,blocks就已经截获了变量值,并保持了下来,而不受后面代码的影响。

__block

如果想在blocks中,给blocks外面的变量赋值,必须用__block申明该变量。

int __block val = 1;

void (^blk)(void) = ^{
  val = 10;
}

blk();

printf("val = %d",val);

输出结果是10

--EOF--
若无特别说明,本站文章均为原创,转载请保留[链接]