Network

NSURLSession

Для работы с загрузкой / выгрузкой данных через HTTP для iOS и macOS используется класс NSURLSession.

Daria Korneichuk
iOS - Developer
Компоненты класса:
NSURLSessionConfiguration
Свойствами сессии управляет класс NSURLSessionConfiguration

Существует 3 типа свойств сессии:

  • default — это обычная сессия с кэшем и куки, по сути то, что до iOS 7 делал класс NSURLConnection в методе [NSURLConnection sendAsynchronousRequest:queue:completionHandler:]
  • ephemeral — в такой сессии ничего не кэшируется и все хранится в оперативной памяти(как приватный режим в браузере)
  • background — происходит в бэкграунде
Помимо выбора типа сессии, существует 20 свойств для ее модификации, например:

  1. возможность загрузки через мобильную сеть
  2. прокси
  3. безопасность
  4. также есть одно интересное свойство discretionary — оно позволяет отдать загрузку на усмотрение системы (когда будет wi-fi и много заряда батареи).
NSURLSessionTask
NSURLSessionTask это задача для сессии.
Задача выполняет работу загрузки с сервера или на сервер каких-то файлов, поиска данных и т.д.

Все эти задачи можно разделить на три типа:

  1. NSURLSessionDataTask: Используйте это задание для запросов типа HTTP GET
  2. NSURLSessionUploadTask: Используйте это задание, чтобы загрузить файл с диска на веб-сервис, как правило, через POST HTTP
  3. NSURLSessionDownloadTask: Используйте это задание, чтобы загрузить файл с удаленного сервиса во временную папку файла.
Любой таск имеет три метода :

  1. cancel — отменить загрузку
  2. resume — по умолчанию все задачи находятся в режиме ожидания, задание на получение данных начнется при вызове resume
  3. suspend — приостановить загрузку(например, когда приложение выходит в бэкграунд, то таск приостанавливает загрузку)
А у NSURLDownloadTask есть еще cancelByProducingResumeData — приостановка с последующим возобновлением работы

Как работать:

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

Давайте получим все песни Джэка Джейсона. Обратимся к iTunes Search API. Читать всю документацию не имеет смысла для нашей тривиальной задачи.

Создаем single view application и в методе viewDidLoad прописываем
Objective-С
Swift 3.0

  1. создаем объект сессии и сразу в конструкторе объявляем ее с конфигурацией (для нашего примера подойдет default)
  2. инициализируем адрес для запроса (можете собрать свой линк, пользуйтесь примерами внизу страницы)
  3. создаем таск (задачу) для сессии, в качестве параметра передаем адрес запроса
  4. метод dataTask with url имеет обработчик (с параметрами data, response и error), он вызывается после завершения загрузки
  5. инициализируем ответ с сервера, заворачивая «голый» ответ(data) в словарь формата JSON
  6. по умолчанию все задачи находятся в режиме ожидания, задание на получение данных начнется при вызове resume (продолжить).
Вам понравилась статья?
Made on
Tilda