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 回答