NSURLConnection vs. NSData + GCD

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 (предполагая, что мне все равно, что касается прогресса загрузки)

29
задан Matt Wilding 14 September 2011 в 19:22
поделиться