4

こんにちは、私はこのライブラリを使用していますが、関数を見つけました:

- (void) queueRequest:(NSString*)urlPath completion:(void(^)(NSData*))completionWithDownloadedData;

シンプルを渡そうとするNSData *data;と、エラーがスローされます。実際にはどういう意味(void(^)(NSData*))ですか? 見るのは初めてです。

どうもありがとう。

4

3 に答える 3

11

(void(^)(NSData*))コード ブロックを宣言します。この方法で関数を呼び出すことができます。

[obj queueRequest:urlPath completion:^(NSData* data){
            /* some code */
        }];

dataは、操作できるブロックへのパラメーターです。このブロックは、queueRequest が完了すると、非同期的に呼び出されます。

于 2013-03-07T09:25:54.740 に答える
4

インターフェースは非同期です。つまり、データは後でしか利用できません。これは、メソッドが単純に を返すことができないことを意味しますNSData*(常にブロックせずに、これは非現実的です)。この問題は最近ではブロックで解決されることが多く、ここでの完了引数はNSData*引数を取り、 を返すブロックですvoid。このようなメソッドを呼び出す方法は次のとおりです。

[foo queueRequest:path completion:^(NSData *receivedData) {
    NSLog(@"Received data: %@", receivedData);
}];

呼び出しはすぐに返され、データが利用可能になった後でブロックが実行されます。

于 2013-03-07T09:26:01.820 に答える
1

NSDataオブジェクトを唯一の引数として受け取り、何も返さないブロックです。

Apple のBlocks Programming Topicsを参照してください。

于 2013-03-07T09:26:00.013 に答える