对我来说,简单的答案是 GCD,Grand Central Dispatch。我几乎不需要修改我的代码......
我的代码是这样开始的......
self.table_array = [self.webQuery downloadAndParseXMLForTable];
[(UITableView *)self.view reloadData];
*webQuery 是一个自定义对象,用于从 Web 下载和解析 xml 数据。**downloadAndParseXMLForTable 是一种自定义方法,同步下载并解析一个 XML 文件,然后返回一个 (NSArray *) 对象以支持表格视图。
下面修改后的代码显示了我为采用 GCD 必须做的唯一更改,并保持我的 UI 响应。
dispatch_queue_t table_download_queue = dispatch_queue_create("com.yourcompany.queuename", NULL);
dispatch_async(table_download_queue, ^{
self.table_array = [self.webQuery downloadAndParseXMLForTable];
dispatch_async(dispatch_get_main_queue(), ^{
[(UITableView *)self.view reloadData];
});
});
dispatch_release(table_download_queue);
就是这样!我希望这可以帮助其他人在我的困境中......
干杯,Z@K!
警告:在 WWDC 2010 上,有人提到 GCD 目前无法支持 SECURE 传输。我不记得细节了,但演讲者奎因对此非常坚决。我相信他建议的过程需要 NSOperation ......