違いは何ですか isEqual:
およびisEqualToString:
?
クラスがisEqual:
?
isEqual:
は文字列をオブジェクトと比較し、オブジェクトが文字列でない場合はNO
を返します。 documentation が示すように、両方のオブジェクトが文字列であることがわかっている場合、isEqualToString:
は高速です。
特別な考慮事項
両方のオブジェクトが文字列であることがわかっている場合、このメソッドは
isEqual:
よりも同等性をチェックするための高速な方法です。
isEqualTo<Class>
は、平等の特定のチェックを提供するために使用されます。例えば; isEqualToArray:
は、配列に同数のオブジェクトが含まれていること、および特定のインデックスのオブジェクトがisEqual:
に対してYES
を返すことをチェックしますテスト。
また、独自の-isEqual:
および-isEqualTo<Class>:
メソッドを記述するための規則は、-isEqual:
のnil引数を許可し、-isEqualTo<Class>:
のnil引数の例外を発生させることです。
私のguessは、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");
}
this を強くお勧めします。 isEqualToStringのパフォーマンス上の利点は、ほとんどのアプリケーションでは基本的に無視できます。しかし、著者が言及している他の2つの違いがあります。
nil
の処理方法