1

我正在一个应用程序中工作,在该应用程序中,我从每个页面的 json 格式的 Web 服务获取数据,并将数据发送到远程数据库。在这个过程中,我的应用程序变得越来越慢。直到从 Web 服务获取数据下一个视图没有加载。这很耗时,有什么方法可以同时获取数据和显示视图。我听说过线程编程,但我不熟悉它。请建议我应该采用哪种技术来制作我的应用程序更快。任何帮助将不胜感激。

4

3 回答 3

3

您可以使用 Grand Central Dispatch 或 NSInvocationOperation 在后台线程中进行加载:

dispatch_queue_t q = dispatch_get_global_queue(0, 0);
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_async(q, ^{
    PagedSearchResult *result = // something which takes a while to complete
    dispatch_sync(main, ^{
        // update the UI
    });
});

看看Ray Wenderlich 的 Grand Central Dispatch 教程

于 2012-10-29T11:16:55.670 回答
0

为此,您可以像在后台进程中完成所有数据的下载和上传一样,这样用户就不需要等到数据完成他们的任务。

对于后台进程,您可以轻松地使用

[self performSelectorInBackground:@selector(runProcessInBackground:) withObject:nil];

或者您也可以参考此 https://stackoverflow.com/questions/9949248/iphone-sdk-running-a-repeating-process-in-a-background-thread。

你也可以在应用程序中使用分页来显示数据,比如在第一次调用中你将只接收来自 Web 服务的前 100 条记录,这样会花费很短的时间,在获取 100 条记录后,当页面结束时加载另一个记录,这样也可以你可以增加你的应用程序。速度。

希望这会帮助你。

于 2012-10-29T11:22:14.650 回答
0

出于您的目的,最简单的方法是使用标准NSURLConnection. 它是开箱即用的异步。在完成处理程序中,您可以例如更新您的 UI,或通知它自行更新。

NSURLRequest *request = [NSURLRequest requestWithURL:
   [NSURL URLWithString:urlString]];
[NSURLConnection sendAsynchronousRequest:request
   queue:self.queue
   completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
       // do something with data or handle error
   }];
于 2012-10-29T11:27:43.970 回答