NSString : isEqual 대 isEqualToString


94

isEqual:과 의 차이점은 무엇입니까 isEqualToString:?

클래스가 단순히 재정의하는 대신 isEqualTo * 메서드 (NSArray의 경우 isEqualToArray, NSData의 경우 isEqualToData, ...)를 추가하는 이유는 무엇 isEqual:입니까?

답변:


103

isEqual:문자열을 객체와 비교 NO하고 객체가 문자열이 아닌 경우 반환 합니다. 문서에 나와 isEqualToString:있듯이 두 개체가 모두 문자열이라는 것을 알고 있으면 더 빠릅니다 .

특별 고려 사항

두 객체가 모두 문자열이라는 것을 알고있는 경우이 방법은 isEqual:.

isEqualTo<Class>평등에 대한 특정 검사를 제공하는 데 사용됩니다. 예를 들어; isEqualToArray:배열에 동일한 수의 객체가 포함되어 있고 지정된 인덱스의 객체 YESisEqual:테스트를 위해 반환 되는지 확인합니다.


3
: 당신은 아론 힐레 가스를 믿는 경우에는 성능 차이를 입력 추구한다의 비트가없는 blog.bignerdranch.com/334-isequal-vs-isequaltostring
오목

2
링크 주셔서 감사합니다-유용합니다. 당신이 우리를 요구하고 있지만 마크 달림 플을 생각하는 - 내가 할 사람 :
Abizern


16

또한 자신의 -isEqual:-isEqualTo<Class>:메서드 를 작성하기 위해 규칙은 nil 인수를 허용하고 nil 인수에 대한 -isEqual:예외를 발생시키는 것입니다.-isEqualTo<Class>:


1
나는 전에 이것을 본 적이 없었습니다. 당신이 아는 문서가 있습니까?
Mike Abdullah

2
isEqualToString에 대해서는 사실이 아닌 것 같습니다. nil을 전달하면 NO를 반환합니다.
Jaka Jančar

9
흥미롭게도 <a href=" developer.apple.com/documentation/Cocoa/Conceptual/… 기본 가이드</a> 의 개체 비교 섹션에 설명되어 있습니다
Jonathan Dann

이것은 사실이 아닙니다. isEqualToString은 예외를 발생시키지 않습니다.
respectTheCode

1
Cocoa Fundamentals Guide 웹 페이지에 "이 문서는 현재 개발에 대한 모범 사례를 나타내지 않을 수 있습니다."라고 말합니다. 분명히 오래되었습니다.
cbh2000

5

생각 엔 isEqualToString :이 전달 된 내용을 입력 할 필요가 없기 때문에 약간의 성능 향상을 제공한다는 것입니다.


여러분의 생각은 아마도 사실입니다 :)
Philip007

5

@Abizern 및 @ 조나단 댄 대답에 확장, 모두 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");
}

4

나는 이것을 강력히 추천 한다 . isEqualToString의 성능 이점은 기본적으로 대부분의 응용 프로그램에서 무시할 수 있습니다. 그러나 저자가 언급 한 다른 두 가지 차이점이 있습니다.

  • 형식 안전성
  • nil처리 방법

두 사람이 nil을 처리하는 방식에는 차이가 없습니다. 수신자 나 인수 또는 둘 다일 수 없습니다.
SayeedHussain

무엇이든 "이"더 이상 존재 : /
자레드 그럽

1
@JaredGrubb에게 감사합니다. 새 URL을 찾았습니다.
Ben Packard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.