回答:
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は扱われます