Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Отчего NSURLSession отменнее, чем NSURLConnection

Anna | 2.07.2014 | нет комментариев

iOS 7 официально вышла в сентябре, тогда Apple предоставила разработчикам новейший метод работы с сетью — NSURLSession. Это довольно фундаментальная вещь, потому в случае необходимости поддержки iOS 6 и ниже, распараллеливать код касательно версии системы будет весьма проблематично. Но тем не менее, время идет, и теснее теперь по различным данным от 75 до 85 процентов пользователей перешло на последнюю iOS, потому я бы советовал испробовать NSURLSession теснее в дальнейшем плане.

По плану Apple, NSURLSession должна сменить NSURLConnection, и здесь подлинно появляется вопрос: «а для чего все это нужно?» Потому сразу плюсы по сопоставлению с NSURLConnection:

  1. Загрузка и отправка данных в бэкграунде
  2. Вероятность останавливать и продолжать загрузку
  3. Мы можем применять блоки и делегаты единовременно, так, скажем, блоки используем для приобретения данных и обработки ошибок, а делегатный способ — для прохождения аутентификации
  4. У сессии есть особый конфигурационный контейнер, в тот, что дозволено уложить все надобные свойства для всех тасков(запросов) в сессии, а также, скажем, хэдеры для всех запросов в сессии
  5. Дозволено применять приватное хранилище для куков, кэша и прочего
  6. Получаем больше суровый и структурированный код, в различие от комплекта беспорядочных NSURLConnection

Покажу, что новейший метод вовсе не ужасный и что его подлинно стоит применять. Выходит приступим, ключевым классом является NSURLSession, как ясно из наименования, он создает некую сессию, для загрузки/выгрузки данных через HTTP. Существует три типа сессии: default — это то, что прежде делал NSURLConnection, ephemeral — в ней ничего не кэшируется и все хранится в оперативной памяти(напоминает приватный режим в браузере), download — итог представляется в виде файлов.

NSURLSessionConfiguration

Свойствами сессии управляет класс NSURLSessionConfiguration, в котором есть большое уйма параметров, помимо выбора типа сессии: вероятность загрузки через мобильную сеть, куки, кэш, прокси, безопасность. Есть одно увлекательное качество discretionary — оно разрешает отдать загрузку на усмотрение системы (когда будет wi-fi и много заряда батареи).

NSURLSession

Задав конфигурацию сессии, создаем саму сессию, принимая конфигурацию в конструкторе. Данные получаем привычными двумя методами: устанавливаем делегата либо ловим данные в completion блоке (о них чуть позднее).

NSURLTask

Является минимальной задачей, то что до это было NSURLConnection. Сам по себе класс отвлеченный, но у него есть 3 подкласса: NSURLSessionDataTask, NSURLSessionUploadTask (подкласс первого) и NSURLSessionDownloadTask, однако, и у них нет собственного конструктора. Все они создаются самой сессией c completion блоком либо без (абсолютно разумно, что в первом случае делегат сессии не необходим). Выглядит все это несколько экзотично:

NSURLSessionDownloadTask *downloadTask = [ourSession downloadTaskWithRequest:simpleNSURLRequest];

Блоки и делегаты

Вообще сам процесс загрузки крепко напоминает работу с NSURLConnection, быстренько разглядим два пути работы с сессиями.

Через делегаты:
Сессии задаем делегата во время создания.

[NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

Позже чего все делегатные способы (в том числе и тасков) вызываются в делегате.

Через блоки:
Довольно лишь создавать таски с поддержкой

 -(NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURL *location, NSURLResponse *response, NSError *error))completionHandler

Вновь же ничего нового, все это нам знакомо по NSURLConnection -sendAsynchronousRequest:queue:completionHandler:
В этом случае мы можем добавить делегатный способ для прохождения аутентификации при необходимости.

Примеры

Разобрались с всеобщей схемой, отложим теорию, время посмотреть примеры!

Остановка/продолжение загрузки.

Каждая схема довольно крепко напоминает работу через NSURLConnection, но, в отлич

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB