0
- (void)removeObjectsInArray:(NSArray *)otherArray

受信側の配列から、別の指定された配列内のオブジェクトを削除します。このメソッドはremoveObject:に似ていますが、1回の操作でオブジェクトの大きなセットを効率的に削除できます。受信側の配列にotherArray内のオブジェクトが含まれていない場合、このメソッドは効果がありません(ただし、コンテンツの検索のオーバーヘッドが発生します)。このメソッドは、otherArrayのすべての要素がハッシュとisEqual:に応答することを前提としています。

removeObjectsinArrayにはisEqualが必要であることを理解しています

なぜオブジェクトを実装する必要があるのですか?

4

1 に答える 1

3

NSObjectのドキュメントから:

2つのオブジェクトが等しい場合、それらは同じハッシュ値を持っている必要があります。この最後の点は、サブクラスでisEqual:を定義し、そのサブクラスのインスタンスをコレクションに入れる場合に特に重要です。サブクラスでもハッシュを定義していることを確認してください。

をオーバーライドする場合は-isEqual:、もオーバーライドすることをお勧めします-hash。それが最初の理由です-彼らが-removeObjectsInArray:ドキュメントで同じ推奨をしないことは一貫性がないでしょう。

2番目の理由はもっと微妙です。-hash経験豊富な開発者として、実装には使用されない-removeObjectsInArray:(または実験によって見つける)ことはなく、オブジェクトに実装しないことで回避できると想定できます。ただし、Appleは、最適化に値すると思われる場合は、実装に使用する権利を留保していること、および万が一の場合に備えて実装する必要があることを明確にしています。-hash

(彼らが現在の実装でそれを使用しているかどうかはわかりません)

于 2012-09-22T14:49:58.117 に答える