web-dev-qa-db-ja.com

NSString:isEqual vs. isEqualToString

違いは何ですか isEqual:およびisEqualToString:

クラスがisEqual:

93
Jaka Jančar

isEqual:は文字列をオブジェクトと比較し、オブジェクトが文字列でない場合はNOを返します。 documentation が示すように、両方のオブジェクトが文字列であることがわかっている場合、isEqualToString:は高速です。

特別な考慮事項

両方のオブジェクトが文字列であることがわかっている場合、このメソッドはisEqual:よりも同等性をチェックするための高速な方法です。

isEqualTo<Class>は、平等の特定のチェックを提供するために使用されます。例えば; isEqualToArray: は、配列に同数のオブジェクトが含まれていること、および特定のインデックスのオブジェクトがisEqual:に対してYESを返すことをチェックしますテスト。

102
Abizern

また、独自の-isEqual:および-isEqualTo<Class>:メソッドを記述するための規則は、-isEqual:のnil引数を許可し、-isEqualTo<Class>:のnil引数の例外を発生させることです。

16
Jonathan Dann

私のguessは、isEqualToString:で渡されるものを型チェックする必要がないため、わずかなパフォーマンスの向上を提供することです。

5
iKenndac

@Abizernと@Jonathan Dannの回答を拡張すると、isEqualisEqualToStringの両方が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");
}
5
respectTheCode

this を強くお勧めします。 isEqualToStringのパフォーマンス上の利点は、ほとんどのアプリケーションでは基本的に無視できます。しかし、著者が言及している他の2つの違いがあります。

  • 型の安全性
  • nilの処理方法
4
Ben Packard