3

AFNetworkingについて質問があります。私はここでドキュメントを読みました:

http://afnetworking.github.com/AFNetworking/Classes/AFImageRequestOperation.html

それは言う:

urlRequest:操作の実行中に非同期でロードされるリクエストオブジェクト。

問題は、以下のリクエストを実行すると、メインスレッドで発生することです。メインスレッドにあるかどうかを確認することで確認できました。

AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:urlrequest success:^(UIImage *image) {
    if ([NSThread mainThread]){
        NSLog(@"this is the main thread");
    }
}];
[operation start];

私が間違っていることはありますか?ドキュメントの解釈が間違っていましたか?ドキュメントに従って非同期ではないのはなぜですか?

4

3 に答える 3

13

KVISH>ただし、別のsuccessCallbackQueueを割り当てることができます。

dispatch_queue_t backgroundQueue = dispatch_queue_create("com.name.bgqueue", NULL);
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.successCallbackQueue = backgroundQueue;
于 2013-07-16T06:29:46.563 に答える
11

画像がバックグラウンドで読み込まれ、メインスレッドで成功ブロックが呼び出されます。

これのポイントは、時間がかかり、UIをブロックする画像の読み込みはバックグラウンドで行われるということですが、画像が読み込まれたら、UIImageViewに設定するようなことをしたいと思うでしょう。これには、メインスレッド。

于 2012-10-24T17:23:03.917 に答える
1

うわー、尋ねる前に私がこれに気づかなかったなんて信じられない。AFNetworkingクラスでは、次のようになります。

dispatch_async(requestOperation.successCallbackQueue ?: dispatch_get_main_queue(), ^(void) {
                    success(operation.request, operation.response, processedImage);
                });

したがって、成功はメインキューで呼び出されます。名探偵コナン

于 2012-10-24T17:22:29.133 に答える