3

URLSession.shared在 swift 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()
}

在此处输入图像描述

4

1 回答 1

1

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

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

此外,您的回调中的自我引用很可能会在您的请求仍处于待处理状态时保留在您的视图控制器上。在块开始时使用弱自我来打破循环。但这完全取决于您的设计。至少在某些情况下,它让我受益匪浅。

我也想参考这个答案:https ://stackoverflow.com/a/35757989/3351794

于 2017-03-14T07:43:58.313 回答