Утечка памяти в Swift 3 URLSession

У меня возникают утечки памяти в сети. URLSession.shared в быстром 3. Это ошибка или я что-то не так делаю?

override func viewDidLoad() {
    super.viewDidLoad()
    let urlStr = "https://qrng.anu.edu.au/API/jsonI.php?length=10&type=hex16&size=2"
    URLSession.shared.dataTask(with: URL(string: urlStr)!) { data, response, error in
        self.view.backgroundColor = UIColor.red
        print(response)
    }.resume()
}

1 ответ

Решение

У сеанса общего URL-адреса есть хранилище учетных данных для файлов cookie и других "браузерных" вещей. Поскольку он является общим, он представляет собой синглтон, который будет жить вечно в вашем приложении. Инструменты интерпретируют это как утечку.

Совет: повторите действие несколько раз, прежде чем искать утечки.

Кроме того, вполне вероятно, что собственная ссылка в вашем обратном вызове удерживает ваш контроллер представления, пока ваш запрос еще не обработан. Используйте слабое Я в начале блока, чтобы разорвать цикл. Но это полностью зависит от вашего дизайна. Это досталось мне хотя бы в нескольких случаях.

Я также хочу сослаться на этот ответ: /questions/43193050/utechka-pamyati-pri-ispolzovanii-nsurlsessiondownloadtaskwithurl/43193051#43193051

Другие вопросы по тегам