2016-11-07 40 views
1

我一直在使用仪器分析时遭受内存泄漏。内存泄漏当自定义UIViewController的子类

所以情况是我有一个从UIViewController继承的父AVC和一个名为BVC的AVC的子类。这个BVC有一个辅助类的实例,它在viewDidLoad上被初始化。那么,乐器声称在viewDidLoad上有内存泄漏。

Instruments output

这是我用来重现问题的示例代码。奇怪的是,如果“a”是AVC的成员并且在BVC“A”中初始化,它不会泄漏。

import UIKit 

class A 
{ 
} 

class AVC: UIViewController 
{ 
    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 
} 

class BVC: AVC 
{ 
    var a: A! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     a = A() 
    } 
} 

所以问题是,为什么“a”泄漏时,它是一个BVC的实例,而不是AVC?此外,这两种情况下都会捕获内存图。

Memory graph

感谢

回答

0

你应该申报为

var a: A? 

从来没有使用强制解除绑定自选的。

+0

这根本不是问题,也没有回答这个问题。此外,在我的实际应用程序中,“a”不应该是零,我不能直接在它声明的同一行中初始化它,所以优雅的解决方案是强制解包,这是解压的实际用法之一。 –