Swift 3 URLSession 内存泄漏

Swift 3 URLSession memory leak

我在 swift 中对 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()
}

共享 URL 会话具有用于 cookie 和其他 "browser" 内容的凭据存储。因为它是共享的,所以它是一个将永远存在于您的应用程序中的单例。 Instruments 将此解释为泄漏。

建议:在查找泄漏之前重复此操作几次。

此外,当您的请求仍未决时,您的回调中的自我引用很可能会保留在您的视图控制器上。在块开始时使用 weak self 来打破循环。但这完全取决于您的设计。至少在某些情况下它让我明白了。

我也想参考这个答案: