AFNetworking发生在主线程上

时间:2012-10-24 17:12:48

标签: ios afnetworking

我对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];

我做错了什么吗?我是否错误地解释了文档?为什么文档后面不是异步的?

3 个答案:

答案 0 :(得分:12)

KVISH> 但是,您可以指定不同的successCallbackQueue:

dispatch_queue_t backgroundQueue = dispatch_queue_create("com.name.bgqueue", NULL);
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.successCallbackQueue = backgroundQueue;

答案 1 :(得分:11)

正在后台加载图像,然后在主线程上调用成功块。

关键在于加载需要一些时间并且会阻止你的UI的图像是在后台完成的,但是一旦加载了图像,你可能想要做一些事情,比如在UIImageView上设置它并且需要在主线上。

答案 2 :(得分:1)

哇,不敢相信我在问之前没有注意到这一点。在AFNetworking类中,它具有以下内容:

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

因此在主队列上调用成功。案件结案。