Block Coding基本
Block Codingに関する話題
Blocks represent typically small, self-contained pieces of code
これがAppleでの説明ですなんとなくわかるようなそうでないような
Basic Sample
int var = 1; int (^myblock)(int) = ^(int num){ return var * num; }; NSLog(@"%d", myblock(5));
__block
JavaScript closureのような機能を想像しますね
普通に考えると独立したブロック内だと, 例えばメソッド内など外部の変数はグローバル変数とか
でない限りは利用できませんが, JavaScriptのclosure同様利用できます
ただし, 読み取り専用, 書き換える必要ありの場合には注意が必要です
Read-only
読み取り専用であれば何も気にせず使いましょう
Writable
さてこちらは一工夫必要です, __block
というキーワードをつけると, blockないでの変更がきちんと反映されます
__block var2 = 3; void(^mul)(int) = ^(int num) { var2 = var2 * num; }; mul(3); NSLog(@"Mul %d", var2);
Good way to use
つかいどころってあるのでしょうか?
Appleのサンプルでは, qsortなどの入れ替えメソッドに使う例がありました.
他はどうでしょう, コールバックメソッドでしょう