4

NSDictionaryオブジェクトが のキーになるには、に準拠する必要があることに気付きましたNSCopying

これはなぜですか?すべてのキーを実装する必要があることは理解できますhashが、なぜNSCopyingですか?

4

2 に答える 2

6

NSDictionaryあるキーを使用して値を格納すると、xこのキーは固定さyれ、同等のキー( )を使用してこの値を取得できることが保証されますy.isEqual(x) == YES。これを行うには、次の 2 つの方法しかありません。

  1. キーが変更されないようにコピーします。
  2. キーが不変であることを要求します。

Apple は、ほとんどの場合、キーに対処する方がよいと判断しました。

キーがコピーされていない場合に辞書が必要な場合 (たとえば、キーが NSCopying を実装していないか、対処にコストがかかりすぎる場合)、NSMapTableを使用できます。たとえば、使用できます

[NSMapTable strongToStrongObjectsMapTable]

キーと値を強力な参照として保存します。

于 2015-04-11T17:21:36.157 に答える
6

キーコピーされるためです。最初に使用したのとまったく同じオブジェクトへの参照としてキーを保存したくないと思いませんか? ミュータブルな可能性のあるインスタンスd[myThing] = myValueへの参照を保持しているとしたら、それはひどいことです。これは、辞書が独自の背後で変異する可能性があることを意味します。myThing

于 2015-04-11T16:14:27.570 に答える