我对GCD有点困惑
我尝试调用一个执行 Web 服务调用的类:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[searchService doSearch:self.searchData];
});
我正在使用 Sudzc 生成的网络服务。对由 Sudzc 生成且位于 SearchService 类内部的服务的实际服务调用如下:
[service doSearch:self action:@selector(doSearchHandler:) e: searchArgs];
通话结束后,我应该返回:
- (void) doSearchHandler: (id) value {
}
如果不使用 GCD,它可以正常工作,但是当我添加它时,我永远不会返回到 doSearchHandler 方法。
最佳答案
我遇到了 Sudzc 操作阻塞主线程的问题。
然而,Soap 请求不是问题,因为虽然 NSURLRequest 是在主线程上执行的,但它的数据是由委托(delegate) didReceiveData
阻碍我的 UI 的是处理程序方法中发生的接收 XML 的处理。
在处理程序方法中 (- (void) SudzcRequestHandler: (id) value { ...
) 我像这样处理数据:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
...processing...
[[NSNotificationCenter defaultCenter] postNotificationName:KManagerHasFinishedLoading object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:NOTIFICATION_RESULT_OK], @"Result", nil]];
});
我在 Manager 中运行处理,它是一个单例对象,但其他实现可能会有所不同。因此,该通知用于让我的 ViewController 知道处理已结束。
关于iphone - 使用 GCD 执行 sudzc Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359493/