예, 하드 코딩 된 NSString (문자열 리터럴) (즉 @"..."
, 소스 코드에 있음)은 프로세스가 실행되는 동안 무기한 존재하는 문자열로 변환됩니다.
그러나 NSArray 의 containsObject:
메소드 isEqual:
는 객체를 호출 하므로 샘플 스 니펫에서 반환 되는 것과 같이 동적으로 생성 된 문자열 도 마찬가지 [NSString stringWithFormat:@"%d", 2]
입니다YES
.
이는 NSString의 isEqual:
(또는 더 정확하게는 그것의 isEqualToString:
) 메소드가 내용을 인식 하도록 구현되어 (포인터 ID 비교와 비교) , 따라서 YES
(비교시) 매우 동일한 문자 시퀀스를 포함하는 모든 문자열 쌍 을 반환 하기 때문입니다. 그들이 만들어 졌을 때.
동일한 (포인터) ID를 확인하려면 배열을 열거하고 다음을 통해 비교해야합니다.
NSString *yourString = @"foo";
BOOL identicalStringFound = NO;
for (NSString *someString in stringArray) {
if (someString == yourString) {
identicalStringFound = YES;
break;
}
}
(하지만 아마도 원하지 않을 것입니다).
또는 더 편리한 방식으로 :
BOOL identicalStringFound = [stringArray indexOfObjectIdenticalTo:someString] != NSNotFound;
(이것도 원하지 않을 것입니다).
합산:
이유 그래서 당신은에서 긍정적 인 답변을 얻고 containsObject:
있다 NOT 리터럴 문자열이 같은 일정 인스턴스를 공유하기 때문에, 하지만 인해 containsObject:
대회 호출하여 isEqual:
콘텐츠를 인식.
NSObject 프로토콜isEqual:
에서에 대한 (짧은) 문서를 읽을 수 있습니다 .