Ios 在主线程上发生的事件

Ios 在主线程上发生的事件,ios,afnetworking,Ios,Afnetworking,我有一个关于网络的问题。我在这里阅读了文档: 它说: urlRequest: 要在操作执行期间异步加载的请求对象 问题是当我执行下面的请求时,它发生在主线程上。我可以通过检查它是否在主线程中来确认: AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:urlrequest success:^(UIImage *image) { if ([NSThre

我有一个关于网络的问题。我在这里阅读了文档:

它说:

urlRequest: 要在操作执行期间异步加载的请求对象

问题是当我执行下面的请求时,它发生在主线程上。我可以通过检查它是否在主线程中来确认:

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

我有没有做错什么?我对文档的解释错了吗?为什么不按照文档进行异步操作?

哇,真不敢相信我自己在询问之前没有注意到这一点。在
AFNetworking
类中,它具有以下功能:

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

因此,在主队列上调用success。案例结束。

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

这一点是,加载图像需要一些时间,并且会阻塞您的UI,这是在后台完成的,但一旦加载图像,您可能需要在UIImageView上进行设置,这需要在主线程上进行。

KVISH> 但是,您可以分配不同的successCallbackQueue:

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

是的,通常在完成所有操作后在主线程上调用块。您可以通过更改AFHTTPRequestOperation的CompletionQueue属性在其他线程中运行块。