最終更新:2013-01-10 (木) 11:27:47 (4117d)  

Objective-C/ブロック構文
Top / Objective-C / ブロック構文

Mac OS X 10.6/iOS 4.0から利用可能。

関数を定義せずに、変数としてローカルの変数を作るというようなことができる。

使い方

  • ブロックを表す変数
    戻り値の型 (^ブロック名)(引数);
  • ブロックの定義
    ブロック名 = ^(引数){
    };
  • 呼び出し
    ブロック名();

^{
    NSLog(@"This is a block");
}
int multiplier = 7;
int (^myBlock)(int);
myBlock = ^(int num) {
    return num * multiplier;
};
printf("%d", myBlock(3));
// "21"と出力する
  • ブロックでは、ブロックが定義されているスコープ(有効範囲)に含まれている変数を利用できます。
  • ブロックを変数として宣言した場合には、ブロックを関数と同じように使用できます。
  • 多くの場合、ブロック変数を宣言する必要はありません。その代わりに、引数として必要になる場所にブロックリテラルをインラインで記述します。

ブロックの機能

  • ブロックは、以下のような特徴を持つ無名のインラインコードの集合体です。
    • 関数と同様に、型付きの引数リストを持つ
    • 推定または宣言された戻り値型を持つ
    • ブロックの定義を含むレキシカルスコープの状態を把握できる
    • 必要であれば、レキシカルスコープの状態を変更できる
    • 変更できるかどうかは、同じレキシカルスコープ内で定義されているほかのブロックと共通である
    • レキシカルスコープ(スタックフレーム)が破棄された後も、引き続きそのレキシカルスコープ内で定義されている状態を共有したり変更したりできる

関連

参考