2

私は、Objective-C で多くのことが行われていることを推測しました。また、データ型について簡単に説明するチュートリアルをいくつか見てきましたが、構文を簡単に説明しているものに出くわしたことはありません。

まず、これはどういう意味ですか?スレッドを開始し、サーバーから返されたデータを取得します。

- (void)apiCall:(void (^)(NSMutableArray *list))block {

その関数ヘッダーの何かが非同期であることを教えてくれますか? というblockことですか?

4

3 に答える 3

4
  1. いいえ、ブロックは非同期を意味するものではありません。Obj-Cのブロックは、メソッドへの引数として渡すことができるコードのほんの一部です。
  2. -で始まるメソッドはインスタンスメソッドであり、+で始まるメソッドはクラスメソッドです。
  3. ^は、ブロックを示す構文マーカーです。
于 2012-05-08T20:24:33.653 に答える
2

2 番目の箇条書きから始めましょう。クラス メソッドは で宣言され+、インスタンス メソッドは で宣言され-ます。

1 つ目と 3 つ目は関連しており、block という名前のパラメーターはコード ブロックであり、後で実行することを目的としたコードです。このメソッドの名前を考えると、これapiCallは呼び出しが完了した後に実行されるメソッドであることをお勧めします。

このメソッドが別のスレッドでなんらかの作業を行ってから、指定したブロックを呼び出すのではないかと考えるのは自然なことですが、そのためにはドキュメントまたはコードを確認する必要があります。

署名:(void (^)(NSMutableArray* list)) block戻り値の型が void で、NSMutableArray* list唯一のパラメーターとしてのコード ブロックを記述します。

ブロック パラメーターの使用例は次のようになります。

void (^apiCallCallback)(NSMutableArray*) = ^(NSMutableArray* list) {
    NSLog(@"The API returned %d items in a list", [list length]);
}

[someApiInstance apiCall:apiCallCallback];

API インスタンスが想定どおりの処理を完了すると、ログ ステートメントが出力されます。

于 2012-05-08T20:33:58.600 に答える
2

最初の質問については、API ドキュメントを見て、非同期かどうかを確認する必要があります。

一般的なブロックの詳細については、次を参照してください。

Apple ブロック プログラミング ガイド

于 2012-05-08T20:26:03.627 に答える