4

オブジェクトをラップするクラスがあり、(メソッドを使用して)NSMutableSetオブジェクトをに追加するインスタンスメソッドがあります。addObject:NSMutableSet

これはうまく機能containsObject:しますが、オブジェクトをセットに追加する前にメソッド内で明示的に呼び出しているため、パフォーマンスの問題が発生しています。

3部構成の質問:

  1. containsObject:セットにオブジェクトを追加する前に呼び出す必要がありますか?
  2. もしそうなら、私は実際にどのような方法を使うべきですか、containsObjectそれともcontainsObjectIdenticalTo:
  3. そうでない場合、どのcontainsメソッドが内部で呼び出されaddObject:ますか?これは私にとって重要です。オブジェクトを渡すcontainsObject:とtrueが返されますが、渡すとcontainsObjectIdenticalTo:falseが返されるからです。
4

1 に答える 1

8

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

パフォーマンスの低下に関しては、実際に問題であると測定しない限り、心配する必要はありません。セット(少なくとも、セットのスマートな実装)にはO(1)ルックアップ時間があります(平均的な場合)ので、できれば非常に驚きます。NSSet私はあなたと友人が賢い実装であることを保証します。:)

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

于 2010-10-18T06:20:24.340 に答える