block の中で使う変数を変更する方法

Objective-C でいつの間にか block 構文を使えるようになって便利というか、method に勝手に組み込まれているので覚えざるを得ない状況です。

block って便利なんですが、文が長くなりすぎてしまいわかりにくいのが難点かと。

その他、block 内で変数を変更しようとしても上手くいかない。これには理由があって、変数のキャプチャ機能があるので block 内部では実際の変数ではなくコピーが使われていて、block の外の変数は変更されない言語仕様になっているようです。

ただ、それでは困ることもあるわけで、そんな時のために、__block 修飾子が用意されていて、ブロックの外で次のように宣言すれば、block の中で使えて値を共有できるようになります。

    CKReference* __block record_ref;

知らなかったので、class のプロパティ経由で値をやり取りできないか?とか色々試してしまいましたが、できなくて困ったなぁと思ったところだったので、すごい助かりました。

ありがとう、黒本。