当我从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)