isEqual:
과 의 차이점은 무엇입니까 isEqualToString:
?
클래스가 단순히 재정의하는 대신 isEqualTo * 메서드 (NSArray의 경우 isEqualToArray, NSData의 경우 isEqualToData, …)를 추가하는 이유는 무엇 isEqual:
입니까?
답변
isEqual:
문자열을 객체와 비교 NO
하고 객체가 문자열이 아닌 경우 반환 합니다. 문서에 나와 isEqualToString:
있듯이 두 개체가 모두 문자열이라는 것을 알고 있으면 더 빠릅니다 .
특별 고려 사항
두 객체가 모두 문자열이라는 것을 알고있는 경우이 방법은
isEqual:
.
isEqualTo<Class>
평등에 대한 특정 검사를 제공하는 데 사용됩니다. 예를 들어; isEqualToArray:
배열에 동일한 수의 객체가 포함되어 있고 지정된 인덱스의 객체 YES
가 isEqual:
테스트를 위해 반환 되는지 확인합니다.
답변
또한 자신의 -isEqual:
및 -isEqualTo<Class>:
메서드 를 작성하기 위해 규칙은 nil 인수를 허용하고 nil 인수에 대한 -isEqual:
예외를 발생시키는 것입니다.-isEqualTo<Class>:
답변
내 생각 엔 isEqualToString :이 전달 된 내용을 입력 할 필요가 없기 때문에 약간의 성능 향상을 제공한다는 것입니다.
답변
@Abizern 및 @ 조나단 댄 대답에 확장, 모두 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의 성능 이점은 기본적으로 대부분의 응용 프로그램에서 무시할 수 있습니다. 그러나 저자가 언급 한 다른 두 가지 차이점이 있습니다.
- 형식 안전성
nil
처리 방법