Blockの外にある変数を利用するときに、値のコピーではなく、参照にする方法のメモ。
(iOS 5で試しています)
普通に宣言した変数を block の内部で使うと、値のコピーになります。カウンタ等、コピーではなく、参照で値を変更していきたい場合はこれを使いましょう。
__block
block内部で参照できる変数を定義するには、こんな感じで、
__block int y = 5;
と使ってやれば良いです。
サンプルコードです。
(Single View Application とかで ViewController.m に書くとすぐ試せます。)
– (void)viewDidLoad
{
[superviewDidLoad];
__block int y = 5;
void (^block)() = ^{
int x = 3;
NSLog(@”x + y = %d”, x + y);
y = x + y;
};
// ここで実行
block();
// yの値が変更されているか確認します
NSLog(@”y = %d”, y);
// y を変更してから実行
y = 10;
block();
}
実行するとこんなログになります。
blockの外の変数をblock内部で共有できました。
x + y = 8
y = 8
x + y = 13