向新的View Controller展示/筛选时如何避免内存泄漏

时间:2018-07-30 15:59:39

标签: ios swift segue dismiss presentviewcontroller

在我的应用程序中,我有一个MainViewController,用户可以在其中添加,删除和重新排序CollectionView中的项目。每个“收藏夹视图单元”都会启动对新VC(下图中的第n个VC)的筛选。从新呈现的vc用户可以返回MainVC或选择到下一个(或上一个)VC,也可以从MainVCs集合视图访问该VC。

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

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

MainVC VC presented by the MainVC

我的问题是():

如果在以下情况下使用unwind segue,是否需要担心内存泄漏? 用户点击goBackToMainVC(即以前 实例化的VC是否会自动关闭?)

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


编辑:附加问题: 会添加

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

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

2 个答案:

答案 0 :(得分:1)

如果要撤消或退回到主控制器,它将取消分配在演示时加载的已加载视图控制器。也就是说,没有提供对这些视图控制器的任何强烈引用。

要验证是否已取消分配视图控制器,可以在通过deinit关闭控制器时将某些内容打印到控制台。

deinit {
    print("deinit called")
}

答案 1 :(得分:1)

从当前模态搜索调用 dismiss撤消搜索。这就是轻松的情节。因此,无需进行特殊的内存管理。