小编Mat*_*jaz的帖子

在Swift中从Dictionary中获取值或键时保留循环

当我从Dictionary中获取值并将它们放入Array时,我无法释放内存.我试图从Array和Dictionary中删除所有对象,但这些对象仍然存在于某处(deinit未被调用).

我是用以下方式玩的:

class MyData {
    let i = 0
    init () {
        NSLog("Init")
    }
    deinit {
        NSLog("Deinit")
    }
}

var myDictionary:Dictionary<String, MyData> = ["key1":MyData(), "key2":MyData()] 
// Init was called twice

// here is the problem: extract values from Dictionary
var myValues = Array(myDictionary.values)
myValues = []  // nothing - ok, strong references are still in the dictionary

myDictionary = [:] 
// Why Deinit was not called???
Run Code Online (Sandbox Code Playgroud)

如果我删除这两行以进行值提取,则会正常调用Deinit

var anotherDictionary:Dictionary<String, MyData> = ["key1":MyData(), "key2":MyData()]
anotherDictionary = [:] 
// Deinit is called …
Run Code Online (Sandbox Code Playgroud)

arrays dictionary retain-cycle swift

9
推荐指数
1
解决办法
1075
查看次数

标签 统计

arrays ×1

dictionary ×1

retain-cycle ×1

swift ×1