我试图弄清楚 NSMapTable 是如何工作的所以我在操场上尝试以下代码:
class Person {
var name: String
init(name: String ) {
self.name = name
print("\(name) is being initialized")
}
deinit {
print("\(name) is being deinitialized")
}
}
var hobyePerson : NSMapTable? = NSMapTable<Person, NSMutableString>
(keyOptions: .weakMemory, valueOptions: .weakMemory)
var rob : Person? = Person(name: "Rob Appleseed") // print : Rob Appleseed is being initialized
hobyePerson?.setObject("golf", forKey: rob)
hobyePerson?.count // return : 1
rob = nil // print : Rob Appleseed is being deinitialized
hobyePerson?.count // return : 1 (WHY ???!!!!)
如文档中所写:“键和/或值可以选择“弱”保存,以便在回收对象之一时删除条目。”
为什么即使我初始化了对象,以便在解除分配 rob 时它对键值对具有弱引用,但在 hobyePerson 中仍然有一个元素?