【问题标题】:Memory Leak of Dictionary used in singleton单例中使用的字典的内存泄漏
【发布时间】:2017-03-11 22:40:38
【问题描述】:

我有单身人士。它包含2个字典。

struct Stat {
    var statHash:String
    var displayDescription:String
    var displayName:String
    var displayIcon:String
    var statIdentifier:String
}

class Singleton {

    static let sharedInstance = Singleton()

    var statsDesc = [String:Stat]()
    var test = [String: String]()

    init() {
        test["a"] = "b"
    }
}

let singlton = Singleton.sharedInstance

在使用泄漏工具时,我得到第二个字典(字符串,字符串)的内存泄漏。

有人能解释一下为什么会这样吗?

Link to the project on dropbox

感谢您的帮助。

【问题讨论】:

  • 内存泄漏真的很难用sn-p的代码来诊断。如果您可以分享您的项目,这里的某人可以帮助您找到解决方案。
  • 其实就是整个项目。我在我的大项目中注意到了这个漏洞,并决定只用单独的字典来测试单例。 Singleton project Dropbox Link

标签: ios swift dictionary memory-leaks singleton


【解决方案1】:

【讨论】:

    【解决方案2】:

    实际上,单例是泄漏。由于单例拥有对自身的引用,因此它永远不会被释放,它的任何属性也不会被释放。

    Leaks 工具注意到 singlton 超出范围,但分配的内存没有释放,因此它标记了泄漏。但是,在这种情况下,泄漏正是您想要的。

    【讨论】:

    • 问题是只有第二个字典被标记为泄漏,而不是单例本身。如果我删除字典并这样写:class Singleton { static let sharedInstance = Singleton() var num: Int init() { num = 3 } } leak dessapears.
    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多