blockの中で、外にある変数を使う方法のメモ。
(iOS 5で試しています)
blockの外にある変数を block 内部で使う場合、
「値のコピー」
が発生しています。block を代入した時点での外の変数の値を使うことになるため、blockに式を代入した後で、変数の値を変更しても反映されません。
(反映したい場合は、__block を変数の前に付けたりします。 )
サンプルコード

– (void)viewDidLoad

{

    [superviewDidLoad];

    int y = 5;

    void (^block)() = ^{

        int x = 3;

        NSLog(@”足すと %d”, x + y);

    };

    // ここで実行

    block();

    // y を変更してから実行

    y = 10;

    block();

    //block をもう一度代入してみる。

    block = ^{

        int x = 3;

        NSLog(@”足すと %d”, x + y);

    };

    // もう一回

    block();

}

実行すると、こんな感じのログになります。

Block内部では定義した時点の値をコピーして持ってるため、

最初の二つは同じあたい、blockを再定義したあとは新しいyの値です。

足すと 8

足すと 8

足すと 13