nsmutableset addobject
-
08-10-2019 - |
質問
私は包み込むクラスを持っています NSMutableSet
オブジェクト、そして私はオブジェクトを追加するインスタンスメソッドを持っています( addObject:
方法)に NSMutableSet
.
これはうまく機能しますが、私は方法の内部で明示的に呼んでいるので、私はパフォーマンスヒッチの匂いがします containsObject:
セットにオブジェクトを追加する前に。
3部の質問:
- 電話をかける必要がありますか
containsObject:
セットにオブジェクトを追加する前に? - もしそうなら、私はどのような実際の方法を使用すべきか、
containsObject
またcontainsObjectIdenticalTo:
? - そうでない場合、何
contains
メソッドはフードの下に呼び出されますaddObject:
?これは私にとって重要です。なぜなら、私がオブジェクトを渡すとcontainsObject:
それは真実に戻りますが、私がそれを渡すとcontainsObjectIdenticalTo:
それはfalseを返します。
解決
あなたがラッピングしている場合 NSMutableSet
, 、それから呼び出します containsObject:
セットから(定義により)複製は含まれていません。そのため、すでにセットにあるオブジェクトを挿入しようとすると、何も起こりません。
パフォーマンスのヒットに関しては、実際に問題であることを測定しない限り、心配しないでください。セット(少なくとも、セットのスマートな実装)にはO(1)ルックアップ時間(平均ケース)があるので、私は非常に驚きます。私はあなたにそれを保証します NSSet
友達はスマートな実装です。 :)
の実装について私が収集したものから NSSet
, 、それは呼び出されています -hash
使用する場合、それらをビンに「グループ」する方法としてオブジェクトについて containsObject:
また addObject:
. 。使用する場合 containsObjectIdenticalTo:
, 、それはまだ使用されます -hash
検索プロセスを絞り込み、(本質的に)ポインター比較を行い、同一のオブジェクトを見つけるために。
所属していません StackOverflow