質問

私は包み込むクラスを持っています NSMutableSet オブジェクト、そして私はオブジェクトを追加するインスタンスメソッドを持っています( addObject: 方法)に NSMutableSet.

これはうまく機能しますが、私は方法の内部で明示的に呼んでいるので、私はパフォーマンスヒッチの匂いがします containsObject: セットにオブジェクトを追加する前に。

3部の質問:

  1. 電話をかける必要がありますか containsObject: セットにオブジェクトを追加する前に?
  2. もしそうなら、私はどのような実際の方法を使用すべきか、 containsObject また containsObjectIdenticalTo:?
  3. そうでない場合、何 contains メソッドはフードの下に呼び出されます addObject:?これは私にとって重要です。なぜなら、私がオブジェクトを渡すと containsObject: それは真実に戻りますが、私がそれを渡すと containsObjectIdenticalTo: それはfalseを返します。
役に立ちましたか?

解決

あなたがラッピングしている場合 NSMutableSet, 、それから呼び出します containsObject: セットから(定義により)複製は含まれていません。そのため、すでにセットにあるオブジェクトを挿入しようとすると、何も起こりません。

パフォーマンスのヒットに関しては、実際に問題であることを測定しない限り、心配しないでください。セット(少なくとも、セットのスマートな実装)にはO(1)ルックアップ時間(平均ケース)があるので、私は非常に驚きます。私はあなたにそれを保証します NSSet 友達はスマートな実装です。 :)

の実装について私が収集したものから NSSet, 、それは呼び出されています -hash 使用する場合、それらをビンに「グループ」する方法としてオブジェクトについて containsObject: また addObject:. 。使用する場合 containsObjectIdenticalTo:, 、それはまだ使用されます -hash 検索プロセスを絞り込み、(本質的に)ポインター比較を行い、同一のオブジェクトを見つけるために。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top