如何在向新的视图控制器呈现/继续时避免内存泄漏

How to avoid memory leaks while presenting / segueing to new View Controllers

在我的应用程序中,我有一个 MainViewController,用户可以在其中添加、删除和重新排序 CollectionView 中的项目。每个 Collection View Cell 都会启动 segue 到一个新的 VC(下图中的第 n 个 VC)。从新出现的 vc 用户可以返回到 MainVC 或继续到下一个(或上一个)VC,也可以从 MainVCs 集合视图访问。

由于集合视图中项目的顺序是动态的,我将实例化下一个 VC 然后呈现它:

let nextVC = storyboard?.instantiateViewController(withIdentifier: "NextVC")
present(nextVC!, animated: true, completion: nil)

我的问题是(是):

如果我使用 unwind segue 时,我是否需要担心内存泄漏? 用户点击 goBackToMainVC(即之前所有 实例化的 VCs 会被自动关闭吗?)

如果用户决定不返回 MainVC,我是否应该在显示新的之前关闭当前的 VC?如果是这样,我应该在哪里调用 dismiss 函数?


编辑:附加问题: 会添加

if (presentingViewController?.restorationIdentifier != "MainVC") {
            presentingViewController?.dismiss(animated: false, completion: nil)
        }

从 MainVC 中的集合视图访问的每个 VC 解决了我的问题?

如果您正在关闭或回退到主控制器,它会释放在呈现时加载的加载视图控制器。也就是说,如果没有对这些视图控制器的任何内容的强引用。

要验证视图控制器是否被释放,您可以在通过 deinit 关闭控制器时向控制台打印一些内容。

deinit {
    print("deinit called")
}

来自 Present Modally segue 的 unwind segue 调用 dismiss。这就是 unwind segue 。所以没有与展开转场关联的特殊内存管理。