0

我正在我的应用程序中创建一个类型,它可以访问远程休息服务。现在的问题是我正在使用一个 NSUrl 来连接它是同步的,并且由于通过 json 对象的循环量需要一些时间来解析。这导致 UI 在我搜索时冻结。

因此我决定尝试这样做:

[NSURLConnection sendAsynchronousRequest:myRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *taxiData,    NSError *error) {

它似乎好一点,但仍然挂起,因为大部分处理都是在完成处理程序中完成的,它与我假设的主队列相关联。

然后我尝试创建自己的 NSOperationsQueue 或使用 dispatch_asynch:

[NSURLConnection sendAsynchronousRequest:myRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *taxiData, NSError *error) {

           dispatch_queue_t typeAheadQueue = dispatch_queue_create("typeAhead", NULL);

           dispatch_async(typeAheadQueue, ^ { 

}];

它工作正常。唯一的问题是 uitableview 现在需要 10 秒来刷新数据。我现在可以在没有任何中断的情况下打字,但更新 uitableview 时会有很大的延迟。

我接近这个权利吗?任何帮助表示赞赏。

谢谢!

4

2 回答 2

1

检查这个线程:在后台运行一个进程,而用户仍然可以使用 UI

考虑将整个 nsurlconnection 调用放在一个单独的队列中,当需要更新用户界面时,请像 Mundi 建议的那样使用 get_main_queue。

于 2012-11-24T22:00:53.820 回答
0

您可以向主队列发出信号

dispatch_async(dispatch_get_main_queue(), ^{
   [self.tableView reloadData];
});
于 2012-11-24T21:22:03.670 回答