回答:
isEqual:
文字列をオブジェクトと比較しNO
、オブジェクトが文字列でない場合に返します。ドキュメントに記載さisEqualToString:
れているように、両方のオブジェクトが文字列であることがわかっている場合は、より高速です。
特別な考慮事項
両方のオブジェクトが文字列であることがわかっている場合、このメソッドはと同じかどうかを確認するよりも速い方法です
isEqual:
。
isEqualTo<Class>
等しいかどうかの特定のチェックを提供するために使用されます。例えば; isEqualToArray:
配列に等しい数のオブジェクトが含まれていること、および指定されたインデックスのオブジェクトYES
がisEqual:
テストに返されることを確認します。
また、独自の-isEqual:
および-isEqualTo<Class>:
メソッドを作成する場合の規則は、nil引数を許可し、nil引数-isEqual:
の例外を発生させることです。-isEqualTo<Class>:
isEqualToString:渡されたものを型チェックする必要がないため、パフォーマンスがわずかに向上すると私は推測しています。
@Abizernと@Jonathan Dannの両方の回答を拡張して、値isEqual
をisEqualToString
処理しnil
ます。
- (void)testStringEqual {
NSString *string = nil;
STAssertFalse([string isEqual:@"test"], @"NSString isEqual");
STAssertFalse([string isEqualToString:@"test"], @"NSString isEqualToString");
// Note that these both return NO
STAssertFalse([string isEqual:nil], @"NSString isEqual");
STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString");
string = @"test";
STAssertTrue([string isEqual:@"test"], @"NSString isEqual");
STAssertTrue([string isEqualToString:@"test"], @"NSString isEqualToString");
STAssertFalse([string isEqual:nil], @"NSString isEqual");
STAssertFalse([string isEqualToString:nil], @"NSString isEqualToString");
}
私はこれを強くお勧めします。isEqualToStringのパフォーマンス上の利点は、ほとんどのアプリケーションで基本的に無視できます。しかし、著者が言及している他の2つの違いがあります。
nil
は扱われます