通过上面两节,Block语法与Block类型变量,可以理解“带有自动变量值的匿名函数”中“匿名函数”。而“带有自动变量值”在Blocks中表现为“截获自动变量值”。
int val = 10;
const char *fmt = "val = %d\n";
void (^blk) (void) = ^void (void) {
// Block语法表达式中使用之前声明的自动变量fmt、val
printf(fmt, val);
};
val = 2;
fmt = "these values were changed. val = %d\n";
blk();
输出:
val = 10
说明:
Blocks中,Block表达式截获所使用的自动变量的值,即Block表达式保存自动变量的瞬间值。所以即使在执行Block语法后,修改Block表达式中使用的自动变量,也不会影响Block执行时自动变量的值。
网友评论