2017-08-27 1 views
0

xcodeデバッグツールが保持サイクルを検出する方法を理解しようとしています。 私はシンプルな親ビューと子ビューの両方のコントローラーに互いに参照が保持されています。 そして、アプリを開いてVCを何回か閉じた後に、デバッグツールを開くと、サイクルの保持や実行時の問題があることも示されません。 Xcodeのデバッグツールのスクリーンショットをコード例の下に見つけて、添付してくださいxcodeの保持サイクルがメモリグラフに表示されない

class ViewController: UIViewController { 
    var child: ChildViewController? 

    @IBAction func open(_ sender: Any) { 
     performSegue(withIdentifier: "segueChild", sender: nil) 
    } 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if (segue.identifier == "segueChild") { 
      child = segue.destination as? ChildViewController 
      child?.parentVC = self 
     } 
    } 
} 

class ChildViewController: UIViewController { 
    var parentVC: ViewController? 

    @IBAction func close(_ sender: Any) { 
     dismiss(animated: true, completion: nil) 
    } 
} 

ChildViewController

ParentViewController

+0

この回答は見つかりましたか?私はちょうどscarily同様の質問をしました。ハハhttps://stackoverflow.com/questions/48988810/xcode-memory-graph-debugger-not-showing-cycles – Fogmeister

+1

@Fogmeisterいいえ:)しかしそれは私だけではありません:D – mihatel

答えて

-1

[EDIT、本当の答え] 私はあなたが単純にビジュアルを誤読していると思いますデバッガ。スクリーンキャプチャを詳しく見ると、これらのメモリダイアグラムは実際には保持サイクルに分類されています。しかし

注:

実際にメモリを無駄にし、あなたはUIViewController親へのすべての参照を放棄する必要があります。親がアクセス可能なままである限り、親と子の両方は、保持サイクルを持っていてもどこからでもアクセスできます。

(あなたは新しいものと子VCを交換する場合は、前のサイクルが実際に壊れては新しいものでを置き換える。常にchild VCのプロパティを更新することにより、あなたはどちらか何かを無駄にしていない。)

は(全ての矢印が強い)想像:

        V-------------------- 
RootWindow --> GrandParentVC --> ParentVC --> ChildVC --^ 

これは問題ではありません。

ここで、GrandParentVCを置き換えたとします。到達できないサイクルが作成されます:

RootWindow --> ANewVC 

    V-------------------- 
ParentVC --> ChildVC --^ 
+1

回答ありがとう、 まず第一に、プロジェクト名はReatinCycle :)です。その理由は「その名前で分類されています」です。私はあなたが「到達不能なサイクルが作成されました:」ということを理解していますが、ルートビューコントローラを新しいコントローラに変更した後でも、グラフには二重リンクの矢印が表示されません... – mihatel

関連する問題