Block代码块

2019-10-09  本文已影响0人  kangomake
使用 Blocks 截获局部变量值
int a = 10, b = 20;

void (^myLocalBlock)(void) = ^{
    printf("a = %d, b = %d\n",a, b);
};

a = 11;
b = 21;
myLocalBlock();    // 打印结果:a = 10, b = 20
a = 12;
b = 22;

myLocalBlock();    // 打印结果:a = 10, b = 20

为什么两次打印结果都是 a = 10, b = 20?
明明在第一次调用 myLocalBlock(); 之后已经重新给变量 a、变量 b 赋值了,为什么第二次调用 myLocalBlock(); 的时候,使用的还是之前对应变量的值?
因为 Block 语法的表达式使用的是它之前声明的局部变量 a、变量 b。Blocks 中,Block 表达式截获所使用的局部变量的值,保存了该变量的瞬时值。所以在第二次执行 Block 表达式时,即使已经改变了局部变量 a 和 b 的值,也不会影响 Block 表达式在执行时所保存的局部变量的瞬时值。
这就是 Blocks 变量截获局部变量值的特性。

 摘自:作者:行走少年郎
 链接:https://www.jianshu.com/p/ab047cd47218
上一篇 下一篇

猜你喜欢

热点阅读