Memory leaks Swift 3 URL会话内存泄漏

Memory leaks Swift 3 URL会话内存泄漏,memory-leaks,swift3,urlsession,Memory Leaks,Swift3,Urlsession,我在swift 3中对URLSession.shared的网络调用中出现内存泄漏。这是一个错误还是我做错了什么 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

我在swift 3中对
URLSession.shared
的网络调用中出现内存泄漏。这是一个错误还是我做错了什么

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和其他“浏览器”内容的凭据存储。因为它是共享的,所以它将永远存在于您的应用程序中。仪器将其解释为泄漏

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

此外,回调中的自引用很可能在请求仍挂起时保留在视图控制器上。在区块开始时使用弱自我来打破循环。但这完全取决于你的设计。至少在一些情况下,这让我感到很难过


我还想参考这个答案:

对于不会导致内存泄漏的网络呼叫,还有其他方法吗?因为我已经尝试了几种方法,比如创建一个新的
URLSession
,使用
ephimeral
,根据works。但到目前为止,通过最新的URLSession进行的网络调用尚未成功,因此不会泄漏内存。所以我不明白你的问题。我在自己的应用程序中使用它,没有任何问题。请看爱斯基摩人的回答:那么你的意思是仪器检测到的“泄漏”实际上不是泄漏?是的。泄漏是一种不会消失的分配。假设你有循环的代码,在里面你使用了单例。第一次迭代将创建单例,所有其他迭代仅使用它(不再分配)。由于singleton从未发布过,您是否将其视为泄漏?不可以。如果您重复执行一个操作,并且内存消耗一直在增加,则只会计算泄漏。另外,看看关于UrlSessions的副作用的讨论:这澄清了一切。谢谢