ブロックの中でローカル変数を変更したい
ローカル変数は何も修飾子をつけていないとブロックの中で参照はできても変更はできない。
// ダメな例 int count = 0; [Util executeSomeBlock:^{ count += 1; // ビルドできない }];
これだとちょっとしたことを他のスレッドに投げてその結果を受け取りたい、という時不便。
static
つけて静的変数にしたらブロックの中で変更できるようになるが、それでは変数のスコープが必要以上に大きくなってしまう。
こういう、ブロックの中でローカル変数を変更したいときは、変数に __block
修飾子をつけるとできます。
// いける例 __block int count = 0; [Util executeSomeBlock:^{ count += 1; // 変更できる! }];