我对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方法。
发布于 2012-07-20 23:40:50
我遇到了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知道处理已经结束。
发布于 2012-07-07 18:12:57
您应该研究一下同步-异步模式。此SO答案中的两个链接将有所帮助。它不直接使用GCD。但是你可以很容易地适应。
https://stackoverflow.com/questions/11359493
复制相似问题