2017-03-14 35 views
1

私のネットワークでメモリリークが発生しましたURLSession.shared swift 3.これはバグですか、何か間違っていますか?Swift 3 URLSessionメモリリーク

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() 
} 

enter image description here

答えて

0

共有URLセッションはクッキーや他の "ブラウザ" もののための資格情報ストレージを持っています。それが共有されているので、あなたのアプリケーションで永遠に生きるシングルトンです。インストゥルメンツはこれをリークと解釈します。

アドバイス:リークを探す前に、何度かアクションを繰り返してください。

また、要求がまだ保留中の間は、コールバックの自己参照がView Controllerに保持されている可能性があります。ブロックの開始時に弱い自己を使ってサイクルを中断する。しかし、それはあなたのデザインに完全に依存します。それは少なくともいくつかのケースで私を得ました。

また、私はこの答えを参照したい:https://stackoverflow.com/a/35757989/3351794

+0

は、メモリリークが発生文句を言わないネットワーク呼び出しのための他の方法はありますか?私は新しい 'URLSession'を作成するなど、いくつかの方法を試しました。これは[this](http://footle.org/2015/10/10/fixing-a-swift-memory)による' ephimeral'を使用しています。 -leak /)が動作します。しかしこれまでのところ成功していない – John

+0

最新のURLSession経由のネットワークコールはメモリをリークしません。だから私はあなたの質問を理解していない。私は自分のアプリで何の問題もなく使っています。 eskimos answer:ここではhttps://forums.developer.apple.com/thread/14785 –

+0

を参照してください。つまり、計測器で検出された「リーク」は実際にリークではないということですか? – John

関連する問題