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などの入れ替えメソッドに使う例がありました.
他はどうでしょう, コールバックメソッドでしょう
