私は 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 ???!!!!)
ドキュメントに書かれているように:「オブジェクトの1つが回収されたときにエントリが削除されるように、キーや値はオプションで「弱く」保持されます。
rob の割り当てが解除されたときにキーと値のペアへの弱い参照を持つようにオブジェクトを初期化したにもかかわらず、hobyePerson にまだ要素があるのはなぜですか?