Легким ответом для меня был GCD, Grand Central Dispatch. Мне почти не пришлось изменять мой код ...
Мой код начался как этот ...
self.table_array = [self.webQuery downloadAndParseXMLForTable];
[(UITableView *)self.view reloadData];
* webQuery - это пользовательский объект, который загружает и анализирует данные XML из Интернета.
** downloadAndParseXMLForTable - это пользовательский метод, который синхронно загружает и анализирует файл XML, а затем возвращает объект (NSArray *) для поддержки табличного представления.
Измененный код ниже показывает ТОЛЬКО изменения, которые я должен был сделать, чтобы принять GCD, и сохранить отзывчивость моего пользовательского интерфейса.
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);
Вот и все! Я надеюсь, что это помогает другим в моем затруднительном положении ...
Cheers,
Z @ K!
ВНИМАНИЕ: на WWDC 2010 было упомянуто, что GCD в настоящее время не может поддерживать безопасные передачи. Я не помню деталей, но оратор, Куинн, был очень непреклонен в этом. Я полагаю, что процесс, который он предложил, требовал NSOperation ...