来自apple block programming,任何人都可以告诉我这是什么意思
封闭词法范围本地的堆栈(非静态)变量是 捕获为const变量。
答案 0 :(得分:3)
说你有:
int i = 5; // in stack
然后在块中你有:
...
i++; // can't do that, because i now inside the block is a const
...
您要将__block添加到i
声明,以便能够在块内更改i
的值,如下所示:
__block int i = 5; // remove __block and see the error
void (^myBlock)(void) = ^{
NSLog(@"[inside block] i = %i", i); // no error even without __block
i++; // error here without __block
};
myBlock();
NSLog(@"[outside block] i = %i", i);
答案 1 :(得分:1)
这意味着如果在定义块的范围内声明了局部变量,则可以在块中引用该变量,但不能更改其值,也不能看到从外部对其值进行的任何更改。
//-- this is the "Stack (non-static) variables local to the enclosing lexical scope"
int x = 123;
void (^printXAndY)(int) = ^(int y) {
printf("%d %d\n", x, y); //-- you can use x inside the block
};
x表现为一个const变量,即,在定义块时它的值被冻结,你无法修改它。
将此与__block
限定符的使用进行对比,以便能够修改该变量的值。