Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift xcode保留周期未显示在内存图中_Swift_Xcode_Memory Management_Memory Leaks_Retain Cycle - Fatal编程技术网

Swift xcode保留周期未显示在内存图中

Swift xcode保留周期未显示在内存图中,swift,xcode,memory-management,memory-leaks,retain-cycle,Swift,Xcode,Memory Management,Memory Leaks,Retain Cycle,我试图了解xcode调试工具在检测保留周期方面是如何工作的。 我有一个简单的父视图和子视图控制器,它们都保存对彼此的引用。 在执行应用程序打开关闭VC数次后,当我打开调试工具时,它既没有显示保留周期问题,也没有显示运行时问题。 请在下面找到xcode调试工具的代码示例和附带的屏幕截图 class ViewController: UIViewController { var child: ChildViewController? @IBAction func open(_ sen

我试图了解xcode调试工具在检测保留周期方面是如何工作的。 我有一个简单的父视图和子视图控制器,它们都保存对彼此的引用。 在执行应用程序打开关闭VC数次后,当我打开调试工具时,它既没有显示保留周期问题,也没有显示运行时问题。 请在下面找到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)
    }
}

[编辑,真正的答案] 我认为你只是误读了可视化调试器。仔细看看您的屏幕截图,这些内存图实际上被分类在保留周期下

但请注意:

要真正浪费内存,您需要放弃对父级的所有引用。只要父对象保持可访问性,父对象和子对象都可以从某处访问,即使它们有一个保留周期

(如果用新的VC替换子VC,上一个循环实际上会中断,并被新的VC替换。通过不断更新
child
VC属性,您也不会浪费任何东西。)

想象一下(所有箭头都很强):

这不是问题

现在假设我们取代祖父母。将创建一个无法到达的循环:

RootWindow --> ANewVC

   V--------------------
ParentVC --> ChildVC --^

感谢您的回答,首先,项目名称是reaintycle:),这就是为什么它被“分类在该名称下”。我理解你所说的“创建了一个不可到达的循环”是什么意思:“但是在将根视图控制器更改为新的根视图控制器之后,图形仍然没有显示双链接箭头……你找到答案了吗?”?我只是问了一个非常相似的问题。哈哈@Fogmeister No:),但这太棒了,不仅仅是我
RootWindow --> ANewVC

   V--------------------
ParentVC --> ChildVC --^