Трудно дать вам лучший ответ, не зная точно, как выглядит extractInfoWithWebsite:
, но я собираюсь предположить, что он разделен на две части:
- Извлечение данных из URL, который вы 'повторная передача
- Анализ этих данных
Для первой части, если вы используете [NSData dataWithContentsOfURL:...]
или [NSURLConnection sendSynchronoushRequest:returningResponse:error:]
, вам необходимо изменить их.Ни один из этих двух методов получения URL-адреса не позволяет отменить запрос.Apple имеет хорошую документацию о том, как использовать асинхронные, отменяемые методы.
Далее идет анализ, который вы выполняете для данных, которые вы получаете.Если вы не получаете порядка мегабайт из Интернета, ваш синтаксический анализ, вероятно, не стоит отмены .Тем не менее, вы все равно должны выполнять тяжелую работу в фоновом потоке:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//perform parsing
dispatch_async(dispatch_get_main_queue(), ^{
if (!self.view.window)
return; //won't update UI if we've moved offscreen
//call methods to update the UI
});
});
Это позволит выполнить синтаксический анализ в фоновой очереди с приоритетом по умолчанию и один раз обновить интерфейс (любые текстовые поля и т. Д.) В основной очереди.синтаксический анализ завершен.
Да, это не может быть отменено, но, как я уже сказал, если вы не обрабатываете много данных, вероятно, безопасно не инкапсулировать анализ вNSOperation.Вы будете тратить немного процессорного времени, но я сначала попробую этот подход, и если производительность не там, где вам нужно, измените на NSOperation
позже.Нет смысла в ранней оптимизации, если это не нужно.