Memory Leak of Dictionary used in singleton

Hi everyone!

I have singleton. It contains a 2 dictionaries.

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
On using the leaks tool, I am getting a memory leak of the second dictionary(String, String).

screenshot of memory graph debugger <http://imgur.com/a/JRcGd&gt;

If i remove dictionaries and write smth like that:

class Singleton {
    
    static let sharedInstance = Singleton()
    var num: Int
    
    init() {
        num = 3
    }
}
leak disappears.

Could someone, please, explain why this happens?

Thanks for the help.

Kate

In general a leak that you can reproduce with simple code snippets like this is Just a Bug™, and you should file it as such. It would help if you included a runnable test project that reproduces the problem.

<Issues · apple/swift · GitHub;

Please post your bug number, just for the record.

Share and Enjoy

···

On 12 Mar 2017, at 00:04, Ekaterina Belinskaya via swift-users <swift-users@swift.org> wrote:

Could someone, please, explain why this happens?

--
Quinn "The Eskimo!" <http://www.apple.com/developer/&gt;
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

This sounds a lot like:

[SR-3661] Memory Leak from Multiple Dictionary Properties · Issue #46246 · apple/swift · GitHub Memory Leak from Multiple Dictionary Properties

which was fixed in Xcode 8.3. What version of the compiler are you using?

-Joe

···

On Mar 11, 2017, at 4:04 PM, Ekaterina Belinskaya via swift-users <swift-users@swift.org> wrote:

Hi everyone!

I have singleton. It contains a 2 dictionaries.

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
On using the leaks tool, I am getting a memory leak of the second dictionary(String, String).

screenshot of memory graph debugger <http://imgur.com/a/JRcGd&gt;

If i remove dictionaries and write smth like that:

class Singleton {
    
    static let sharedInstance = Singleton()
    var num: Int
    
    init() {
        num = 3
    }
}
leak disappears.

Could someone, please, explain why this happens?