如何避免与子viewControllers的内存泄漏

时间:2018-02-05 19:03:50

标签: ios swift memory-management memory-leaks childviewcontroller

想象一个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引用的内存管理的正确方法是什么。它们应该是弱或强引用吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

基本的经验法则是使“向外”方向的所有引用都很强,而“向后”引用则较弱。

在您的情况下,ViewController1是基本视图控制器。它拥有ViewController2和ViewController3,因此这些引用应该很强大。 ViewController2和ViewController3指向返回以查看控制器1,因此它们的引用应该很弱。

将您的对象图表视为树。它的根源是UIApplication,所有内容都以此为基础。树上方的对象应由其根对象拥有,但不应拥有对其根对象的引用。