【发布时间】:2018-02-05 19:03:49
【问题描述】:
想象一个由多个子 ViewController 组成的 ViewController,如下所示:
ViewController1:
- ViewController2
- ViewController3
ViewController2 不会更改,因此它是在 Storyboard 上使用 containerViews 定义的。为了通过 ViewController1 获得 ViewController2 的引用,我执行以下操作:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destination = segue.destination
if let viewController2 = destination as? ViewController2 {
self.viewController2 = viewController2
}
}
至于 ViewController3,它是动态的,所以它以编程方式添加到 ViewController1 中,如下所示:
addChildViewController(viewController3)
view.addSubview(viewController3.view)
viewController3.didMove(toParentViewController: self)
我的问题是,对于这两种情况,处理 viewController2 和 viewController3 引用的内存管理的正确方法是什么。它们应该是弱引用还是强引用?
谢谢!
【问题讨论】:
-
只要VC2和VC3对VC1没有强引用,就没有引用循环。与其担心不存在的问题,不如验证您是否真的有问题。使用 Instruments 或验证
deinit是否被调用。一旦您遇到实际问题,请发布具有相关细节的问题。 -
你为什么在这个问题之后 9 分钟发布关于内存泄漏的第二个问题? stackoverflow.com/questions/48629539/…
-
当您执行
addChildViewController(或将其作为嵌入式容器)时,会保持对子控制器的强引用。所以你不必担心保持自己对它的强引用。但如果你愿意,你可以。但是这里没有强引用循环。
标签: ios swift memory-management memory-leaks childviewcontroller