我对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];
我做错了什么吗?我是否错误地解释了文档?为什么文档后面不是异步的?
答案 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);
});
因此在主队列上调用成功。案件结案。