ios – 对象层次结构导致Swift中的内存泄漏

前端之家收集整理的这篇文章主要介绍了ios – 对象层次结构导致Swift中的内存泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经能够提炼出我写过的应用程序中出现的问题,并在一个简单的例子中重现了它.

鉴于这些类:

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,当按下时,会实例化一个东西.使用Instruments Profiler,我可以看到内存泄漏.

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

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

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

解决方法

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

这是预期的结果.有9个瞬态东西,只有一个持久的东西 – 目前分配给该属性的东西.如果存在多个持续性Thing,则会发生泄漏,而没有.

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

当我反复点击按钮时,我们会有一点上升(一种“台面”),然后我们再次回到基准面.

原文链接:https://www.f2er.com/iOS/335654.html

猜你在找的iOS相关文章