NSDATA
всегда имел очень удобный метод + DatawithContentsOFURL: Опции: Ошибка:
Отказ В то время как удобно, он также блокирует выполнение текущего потока, что означало, что он был в основном бесполезным для производственного кода (игнорирование Nsoperation
). Я использовал этот метод так нечасто, я полностью забыл, что оно существовало. До не давнего времени.
То, как я собирал данные из труб, является стандартным NSURLConnectionDelegate
Подход: напишите класс загрузки, который обрабатывает различные NSURLConnectionDelegate
методы, постепенно накапливающую некоторые данные, обрабатывать Ошибки и т. Д. Я обычно делаю этот универсальный универсальный, чтобы быть повторным повторно использовать как можно больше запросов.
Скажите, что мой типичный класс загрузки проходит где-то в балке 100 строк. Это 100 строк, чтобы делать асинхронно, что Nsdata
может сделать синхронно в одну строку. Для более сложности этот класс Downloader нуждается в протоколе делегированного протокола, чтобы сообщить о завершении и ошибках своему владельцу, и владельца должна реализовывать этот протокол в некотором роде.
Теперь введите Grand Central Dispatch, и я могу сделать что-то как фантастически проще, как:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
NSData* data = [NSData dataWithContentsOfURL:someURL];
// Process data, also async...
dispatch_async(dispatch_get_main_queue(), ^(void) {
// Back to the main thread for UI updates, etc.
});
});
, и я могу бросить эту присоску в куда-то, что я хочу, правый встроен. Нет необходимости в классе загрузки, не нужно обрабатывать методы делегата подключения: Easy Async Data всего за несколько строк. Неравенство между этим подходом и моим подходом до GCD имеет достаточно велико, чтобы вызвать слишком хорошо, чтобы быть настоящим тревожим.
Таким образом, мой вопрос: есть ли какие-нибудь предостережения к использованию NSDATA
+ GCD для простых задач скачивания данных вместо NSURLConnection
(предполагая, что мне все равно, что касается прогресса загрузки)