NSDictionary
オブジェクトが のキーになるには、に準拠する必要があることに気付きましたNSCopying
。
これはなぜですか?すべてのキーを実装する必要があることは理解できますhash
が、なぜNSCopying
ですか?
NSDictionary
オブジェクトが のキーになるには、に準拠する必要があることに気付きましたNSCopying
。
これはなぜですか?すべてのキーを実装する必要があることは理解できますhash
が、なぜNSCopying
ですか?
NSDictionary
あるキーを使用して値を格納すると、x
このキーは固定さy
れ、同等のキー( )を使用してこの値を取得できることが保証されますy.isEqual(x) == YES
。これを行うには、次の 2 つの方法しかありません。
Apple は、ほとんどの場合、キーに対処する方がよいと判断しました。
キーがコピーされていない場合に辞書が必要な場合 (たとえば、キーが NSCopying を実装していないか、対処にコストがかかりすぎる場合)、NSMapTableを使用できます。たとえば、使用できます
[NSMapTable strongToStrongObjectsMapTable]
キーと値を強力な参照として保存します。
キーがコピーされるためです。最初に使用したのとまったく同じオブジェクトへの参照としてキーを保存したくないと思いませんか? ミュータブルな可能性のあるインスタンスd[myThing] = myValue
への参照を保持しているとしたら、それはひどいことです。これは、辞書が独自の背後で変異する可能性があることを意味します。myThing