2016-10-09 6 views
2

私が書いたアプリに見られる問題を掘り起こし、簡単な例で再現できました。私が押されたときに、事がインスタンス化されていることをボタンでの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

+1

すべてのクラスでブレークポイントを持つ除外メソッドを追加し、ViewControllerインスタンスがポップされたfronナビゲーションスタック(またはモーダル解除された)の後で呼び出されたものと呼び出されなかったものをお知らせください。それらがすべて呼び出された場合、あなたは心配する理由がなく、Profiler自体に何か問題があるかもしれません – alexburtnik

+0

Alex、デニットは間違いなく呼び出されています。私がこれをプロファイラで気づく前に、私はXcodeデバッグセッション内からメモリを構築していました。あなたの気持ちがプロファイラの問題だとすれば、それは私のために十分です。私は、ビューを再作成したり、スタックからそれらをポップしたりしません。 – Brian

+1

おそらく、インストゥルメントの使用が問題になりますか? 「メモリリークが発生するのが見えます」とは、実際にはどういう意味ですか?実際、あなたは何を見ますか?漏出計器を使用しましたか?また、新しいXcode 8メモリグラフ機能を使用しましたか? – matt

答えて

1

あなたは漏れ検出器でバグを発見したことがあり、それは非常に興味深いバグかもしれないので、あなたは、Appleに報告しなければなりません。しかし、実際には漏れはありません。私はインストルメントの下でプロジェクトをダウンロードして実行し、ボタンを10回クリックしました。これは私が楽器の割り当てテンプレートで見たものである:期待される結果である

enter image description here

。一時的なものは9つあり、現在はプロパティに割り当てられているものは1つだけです。 1つ以上の永続的なものがあった場合、漏れがあります。

また、これはメモリゲージがXcodeで次のようになります。

enter image description here

私は繰り返しボタンをタップしたときに我々は少し上昇(「メサ」のようなもの)を取得したが、その後、我々は落ち着きますもう一度ベースレベルに戻ってください。

関連する問題