2017-01-11 12 views
1

Мне нужно небольшое руководство по наилучшей практике с помощью URLSession/NSURLSession.Лучшая практика URLSession - несколько запросов

Мое требование предусматривает, что я должен выполнять adhoc/периодические запросы HTTP GET. т. е. каждые несколько минут, то, возможно, каждые 30 секунд, меняется по желанию.

Во всяком случае, я достиг этого, как следует, у меня есть метод, который содержит код, как это:

let urlRequest = URLRequest(url: url) 

     // set up the session 
     let config = URLSessionConfiguration.default 
     let session = URLSession(configuration: config) 
     // make the request 
     let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in ... 

, который держит в URLSession рамках этого метода.

Так некоторые вопросы:

1) является ли это право способ добиться того, что я ищу, или я должен иметь URLSession в рамках уровня класса и создать несколько «задач»? - если так, то я должен позвонить. исправить каждую задачу?

2) если это приемлемая парадигма использования для URLSession, я теряю память (не думайте так с ARC)? Я спрашиваю, как заметил, что объект URLSession, кажется, остается вне области применения метода, где я называю его/заменяю его каждый раз. (Я проверяю это с помощью WEAK ссылки на объект, который я периодически проверяю).

3) есть ли более простой способ получить один и тот же URL-адрес на основе adhoc с URLSession? Я чувствую, что NSURLConnection справляется с этим, но его устарело.

+0

Можете ли вы просто использовать 'URLSession.default.dataTask (...)'? Это касается проблем с памятью/ARC. Что касается вашего кода, 'URLSession' должен быть жив, по крайней мере, достаточно долго, чтобы завершить блок завершения задачи данных, тогда он должен быть выпущен. – keithbhunter

ответ

3

1) Это правильный путь для достижения того, что я ищу, или у меня есть URL-адрес на уровне уровня класса и создание нескольких «задач»? - если так, то я должен позвонить. исправить каждую задачу?

Ответ: Что вы делаете, это неверно, хотя это редкость. Лучшей практикой будет использование общего экземпляра URLSession. Создание новой конфигурации сеанса и объекта URLSession для каждого запроса, который вы делаете (так часто, как каждые 30 секунд), будет менее результативным, чем использование singleton.

2) если это приемлемая парадигма использования для URL-адреса, я теряю память (не так ли думаешь с ARC)? Я спрашиваю, как заметил, что объект URLSession, кажется, остается вне области применения метода, где я называю его/заменяю его каждый раз. (Проверить это с СЛАБОМ ссылкой на объект, который я периодически инспектировать) ...

Ответ: причина того, что вы можете заметить, что ваш объект URLSession живет за рамки вашего вызова метода является вы передавая ему закрывающееся закрытие, и сеанс, скорее всего, будет жить до тех пор, пока не будет вызван обработчик завершения.

3) есть ли более простой способ получить один и тот же URL-адрес на основе adhoc с помощью URLSession? Я чувствую, что NSURLConnection справляется с этим, но его устарело.

Ответ: Есть много способов добиться этого. Вы можете попытаться сохранить ссылку на URL-адрес или запрос и вызвать свой метод с тем же запросом, который вы хотите.

+0

Спасибо Mac, поэтому, в общем, я не пропущу код, у экранирующего закрытия позаботится ARC? Я должен использовать общий экземпляр с несколькими задачами, чтобы сделать много вызовов? – Woodstock