クラスの作成者は比較する責任があります。つまり、2つのオブジェクトがいつ等しいかを定義する必要があります。
これはcompare:
、NSOrderedAscending、NSOrderedDescending、NSOrderedSameのいずれかを返すメソッドを定義することによって行われます。
ドキュメントから
NSComparisonResult
これらの定数は、リクエスト内のアイテムの順序を示すために使用されます。
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
これらのNSComparisionResultsを返す他のメソッドを作成することを妨げるものは何もないことに注意してください。iENSStringにcompare:
はcaseInsensitiveCompare:
==
同一性をチェックするだけです。ポインタが同じである場合、これはtrueを返しますが、異なるオブジェクトが存在するが、同じプロパティのメニングで同じである場合は、falseを返します。
NSComparisonMethodsプロトコルリファレンスから
NSObjectによってこれらのメソッドの多くに提供されるデフォルトの実装は、セレクター、署名、および説明が以下に一致する単一の比較メソッドを実装するオブジェクトに適しています。
- (NSComparisonResult)compare:(id)object;
このメソッドは、レシーバーがオブジェクトより小さい場合はNSOrderedAscendingを返し、レシーバーがオブジェクトより大きい場合はNSOrderedDescendingを返し、レシーバーとオブジェクトが等しい場合はNSOrderedSameを返す必要があります。たとえば、NSStringは、この非公式プロトコルで宣言されたメソッドのほとんどを実装していませんが、NSStringは必要な要件を満たすcompare:メソッドを実装しているため、NSStringオブジェクトはこのプロトコルに準拠するメッセージを適切に処理します。Cocoaには、NSDate、NSDecimalNumber、およびNSValueクラスの適切なcompare:メソッド実装も含まれています。
つまり、-compare:
メソッドを指定した場合は、を使用することもできます-isEqual:
。
if ([objOne isEqual:objTwo]){ //…