私が書いたアプリに見られる問題を掘り起こし、簡単な例で再現できました。私が押されたときに、事がインスタンス化されていることをボタンでのUIViewを、作成したSwiftでオブジェクトの階層がメモリリークの原因となっています
class Thing {
var name:String = ""
var price:Double = 0.0
var changed:Double = 0.0
var percentChanged:Double = 0.0
}
class TestUIViewController: UIViewController {
}
class ViewController: TestUIViewController {
var thing:Thing?
@IBAction func clicked(_ sender: AnyObject) {
self.thing = Thing()
}
}
:
は、これらのクラスを考えます。 Instrumentsプロファイラを起動すると、メモリリークが発生しているのがわかります。
ただし、ViewControllerクラスがUIViewControllerから拡張されている場合、問題はありません。
これはすべてクイックテストアプリから再現されたので、私が考えることができる他の外的要因はここにありません。ここで
は、サンプルコードです - https://www.dropbox.com/s/ooqh77lhpzbvpv1/ArcTest.zip?dl=0
すべてのクラスでブレークポイントを持つ除外メソッドを追加し、ViewControllerインスタンスがポップされたfronナビゲーションスタック(またはモーダル解除された)の後で呼び出されたものと呼び出されなかったものをお知らせください。それらがすべて呼び出された場合、あなたは心配する理由がなく、Profiler自体に何か問題があるかもしれません – alexburtnik
Alex、デニットは間違いなく呼び出されています。私がこれをプロファイラで気づく前に、私はXcodeデバッグセッション内からメモリを構築していました。あなたの気持ちがプロファイラの問題だとすれば、それは私のために十分です。私は、ビューを再作成したり、スタックからそれらをポップしたりしません。 – Brian
おそらく、インストゥルメントの使用が問題になりますか? 「メモリリークが発生するのが見えます」とは、実際にはどういう意味ですか?実際、あなたは何を見ますか?漏出計器を使用しましたか?また、新しいXcode 8メモリグラフ機能を使用しましたか? – matt