我想在单独的线程上进行Web服务调用。我使用以下代码,
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// My web service request goes from here
});
请求成功,但没有回复,我无法找出原因。
如果我使用
dispatch_async(dispatch_get_main_queue(), ^{
// My Web service request goes from here
});
响应即将回来,但UI被阻止,直到那时,我想在一个单独的线程中执行Web服务请求而不阻止UI。
答案 0 :(得分:0)
这个想法是为请求使用后台线程,但是在main上处理结果(更改UI)。 This answer显示了(基本上是通过将主队列块嵌套在后台块中),但NSURLConnection提供了一种更简单的方法:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http..."]];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
// update the UI here
}];
这个方便的方法执行主要的请求,并且 - 因为你传递主队列 - 在主要队列上执行完成块。