int x = 1; __block int y = 2; dispatch_queue_t q_global = dispatch_get_global_queue(0, 0); dispatch_async(q_global, ^{ x = 10; // できない(コンパイルエラー y = 20; // できる int z = x + y; [self dispValue:z]; // self の参照カウンタが+1される }); 普通に宣言した変数を Block の中で使うと、自動的に「キャプチャ」され、変数が複製される。この変数には、 Block 内では代入できずコンパイルエラーとなる。 __block を付けた変数は、Block 内外で同じ実体を参照でき、代入もできる。 self やプロパティを Block 内で使用すると参照カウンタがインクリメントされ、明示的に release