我对GCD感到有点困惑
我尝试对执行webservice调用的类进行调用:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[searchService doSearch:self.searchData];
});
我正在使用Sudzc生成的webservice。对Sudzc生成的服务的实际服务调用位于SearchService类中,如下所示:
[service doSearch:self action:@selector(doSearchHandler:) e: searchArgs];
一旦通话结束,我应该回到:
- (void) doSearchHandler: (id) value {
}
不使用GCD它工作正常,但是当我添加它时,我永远不会返回doSearchHandler方法。
答案 0 :(得分:1)
我遇到了阻塞主线程的Sudzc操作的问题。
但是,Soap请求不是问题,因为虽然NSURLRequest在主线程上执行,但其数据由委托didReceiveData
阻止我的UI的是处理在Handler方法中发生的接收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知道处理已经结束。
答案 1 :(得分:0)
您应该查看同步 - 异步模式。来自SO答案的两个链接将有所帮助。它不直接使用GCD。但你可以很容易地适应。