4

Apple のドキュメントを調べていたところ、このようなものを見ました(void (^)(void))。誰かがこの声明の意味を説明できますか? ^XORですよね?void XOR void私にはあまり意味がありませんか?

みたいなのもありました(void (^)(BOOL finished))

4

2 に答える 2

14

これらは、無名関数と関数オブジェクトを 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"); }];
于 2010-06-20T14:47:42.143 に答える
1

これはblockであり、C に対する Apple 固有の拡張であり、他の言語の関数ポインタまたは関数オブジェクトに似ています。

(void (^)(void))パラメータを取らず、何も返さないブロックの型への型キャストのように見えます。同様に、(void (^)(BOOL finished))1 つのブール値パラメーターを持ち、何も返さないブロックへの別の型キャストのように見えます。

于 2010-06-20T14:47:44.537 に答える