NSString : isEqual 대 isEqualToString 대신 isEqualTo * 메서드 (NSArray의 경우

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

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



답변

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

특별 고려 사항

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

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


답변

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


답변

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


답변

@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");
}


답변

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

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

답변