Apple のドキュメントを調べていたところ、このようなものを見ました(void (^)(void))
。誰かがこの声明の意味を説明できますか? ^
XORですよね?void XOR void
私にはあまり意味がありませんか?
みたいなのもありました(void (^)(BOOL finished))
Apple のドキュメントを調べていたところ、このようなものを見ました(void (^)(void))
。誰かがこの声明の意味を説明できますか? ^
XORですよね?void XOR void
私にはあまり意味がありませんか?
みたいなのもありました(void (^)(BOOL finished))
これらは、無名関数と関数オブジェクトを Objective-C に追加するブロックです。例を参照してくださいBlocks と Grand Central Dispatch の紹介:
ブロック オブジェクト (非公式には「ブロック」) は、プログラマーが自己完結型の作業単位を簡単に定義できるようにする C、Objective-C および C++ の拡張機能です。ブロックは従来の関数ポインターに似ていますが、それよりもはるかに強力です。主な違いは次のとおりです。
- ブロックは「無名関数」としてインラインで定義できます。
- ブロックは、他の言語の「クロージャー」と同様に、ローカル変数の読み取り専用コピーをキャプチャします
ブロック変数の宣言:
void (^my_block)(void);
それにブロック オブジェクトを割り当てる:
my_block = ^(void){ printf("hello world\n"); };
それを呼び出す:
my_block(); // prints “hello world\n”
引数としてブロックを受け入れる:
- (void)doSomething:(void (^)(void))block;
そのメソッドをインライン ブロックで使用する:
[obj doSomeThing:^(void){ printf("block was called"); }];
これはblockであり、C に対する Apple 固有の拡張であり、他の言語の関数ポインタまたは関数オブジェクトに似ています。
(void (^)(void))
パラメータを取らず、何も返さないブロックの型への型キャストのように見えます。同様に、(void (^)(BOOL finished))
1 つのブール値パラメーターを持ち、何も返さないブロックへの別の型キャストのように見えます。