想象一个ViewController,它由多个子ViewControllers组成,如下所示:
ViewController1:
- ViewController2
- ViewController3
ViewController2没有改变,因此它在带有containerViews的Storyboard上定义。为了通过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引用的内存管理的正确方法是什么。它们应该是弱或强引用吗?
谢谢!
答案 0 :(得分:1)
基本的经验法则是使“向外”方向的所有引用都很强,而“向后”引用则较弱。
在您的情况下,ViewController1是基本视图控制器。它拥有ViewController2和ViewController3,因此这些引用应该很强大。 ViewController2和ViewController3指向返回以查看控制器1,因此它们的引用应该很弱。
将您的对象图表视为树。它的根源是UIApplication,所有内容都以此为基础。树上方的对象应由其根对象拥有,但不应拥有对其根对象的引用。