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