如何在向新的视图控制器呈现/继续时避免内存泄漏
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 是 。所以没有与展开转场关联的特殊内存管理。
在我的应用程序中,我有一个 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 是 。所以没有与展开转场关联的特殊内存管理。