これはアップルブロックプログラミングからのものです、誰かがそれが何を意味するのか教えてもらえますか
囲んでいる字句スコープにローカルなスタック(非静的)変数は、const変数としてキャプチャされます。
これはアップルブロックプログラミングからのものです、誰かがそれが何を意味するのか教えてもらえますか
囲んでいる字句スコープにローカルなスタック(非静的)変数は、const変数としてキャプチャされます。
あなたが持っていると言う:
int i = 5; // in stack
次に、ブロックに次のようになります。
...
i++; // can't do that, because i now inside the block is a const
...
次のようにブロック内のi
値を変更できるように、宣言に__blockを追加します。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);
つまり、ブロックを定義するスコープでローカル変数が宣言されている場合、ブロック内でその変数を参照できますが、その値を変更したり、外部からその値に加えられた変更を確認したりすることはできません。
//-- 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
その変数の値を変更できるようにするための修飾子の使用と比較してください。