对象层次结构导致Swift内存泄漏

时间:2016-10-09 14:28:20

标签: ios swift xcode

我已经能够提炼我在我编写的应用程序中看到的问题,并在一个简单的例子中复制了它。

鉴于这些课程:

class Thing {
    var name:String = ""
    var price:Double = 0.0
    var changed:Double = 0.0
    var percentChanged:Double = 0.0
}

class TestUIViewController: UIViewController {

}

class ViewController: TestUIViewController {

    var thing:Thing?

    @IBAction func clicked(_ sender: AnyObject) {
        self.thing = Thing()
    }

}

我创建了一个带有按钮的UIView,按下时,会实例化一个事物。使用仪器分析器,我可以看到发生内存泄漏。

但是,如果ViewController类从UIViewController扩展,则没有问题。

这一切都是从一个快速测试应用程序中复制而来的,因此我无法想到其他外部力量。

以下是示例代码 - https://www.dropbox.com/s/ooqh77lhpzbvpv1/ArcTest.zip?dl=0

1 个答案:

答案 0 :(得分:1)

您可能在泄漏检测器中发现了一个错误,这可能是一个非常有趣的错误,因此您应该将其报告给Apple。但实际上没有泄漏。我在“仪器”下载并运行了您的项目,并单击了该按钮10次。这就是我在Instruments分配模板中看到的:

enter image description here

这是预期的结果。有9个瞬态东西,只有一个持久的东西 - 目前分配给该属性的东西。如果存在多个持续性Thing就会泄漏,并且没有。

此外,这就是Xcode中内存规格的样子:

enter image description here

当我反复点击按钮时,我们会有一点上升(一种" mesa")然后我们再次回到基准水平。