【发布时间】:2018-04-27 14:35:41
【问题描述】:
这里是新手问题。 想象一个带有 2 个 vc(A 和 B)的非常基本的故事板。 A 嵌入在 navController 中。 A 有一个 collectionView 显示图像网格。 B 正在大显示单击的网格项目。如此简单的列表->详细信息。
用 IB 完成所有操作,我从 collectionView 单元格项目 ctrl 拖动到 B 并选择“显示(例如推送)”segue。
现在,当我运行应用程序并多次单击网格中的图像,然后单击“
这会导致大量内存被使用并且每次都在增长。
我发现了一些关于 unwind 和 pop to root vc 的帖子,但所有帖子都在处理程序化导航。这只是使用 IB 完成的简单故事板的例子。
预期:A->B->A。内存:A
现实:A->B->A。内存:A,B
如何避免为那些被解雇的 vc 保留内存?
在 A 我有:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "dreamDetail" {
let newViewController = segue.destination as! DreamDetailViewController
newViewController.dream = allDreams?[(collectionView.indexPathsForSelectedItems?.first?.item)!]
newViewController.dreams = allDreams
}
}
在 B 我有:
weak var dream: DreamRealm?{
didSet {
}
}
var dreams: [DreamRealm]?{
didSet {
}
}
DreamRealm 只是一个 Realm 模型。
class DreamRealm: Object {
@objc dynamic var filename: String? = nil
@objc dynamic var path = ""
【问题讨论】:
-
您的代码中其他地方的 A->B 和 B->A 之间是否存在强引用?
-
你是如何从 B 导航到 A 的?
-
@ReinierMelian 正如我在描述中所说,只需按导航控制器上的后退按钮即可。没有自定义代码。
-
@TusharSharma 看起来是的。但我刚刚使用 Instruments/Leaks 工具分析了该应用程序,并在进行导航时显示所有绿色检查。
标签: ios swift memory-leaks uiviewcontroller