iOS - 개체 동성 이해
전언
'등동성'에 따라 대상을 비교하는 것은 매우 유용한 기능이다.그러나 ==조작부호에 따라 비교한 결과가 반드시 우리가 원하는 것은 아니다. 왜냐하면 이 조작이 비교한 것은 두 개의 바늘 자체이지 그가 가리키는 대상이 아니기 때문이다.NSOject 프로토콜에 명시된 "isEqual"방법을 사용하여 두 객체의 동일성을 판단해야 합니다.일반적으로 두 유형의 서로 다른 대상은 항상 같지 않다.다음 예:
NSString *test1 = @"test";
NSString *test2 = [NSString stringWithFormat:@"%@",@"test"];
BOOL boolA = (test1 == test2); // NO
BOOL boolB = [test1 isEqual:test1]; // YES
BOOL boolC = [test1 isEqualToString:test2]; // YES
예에서 볼 수 있듯이 ==등동성 판단 방법과 차이점을 보면 NSString은 스스로 등동성 판단 방법을 실현했다. 이름은'isEqual Tostring:'이다.
NSOject 프로토콜에는 동일성을 판단하기 위한 두 가지 주요 방법이 있습니다.
//두 대상이 동일한지 판단(규칙을 사용자 정의할 수 있음)
@interface Person : NSObject
@property (nonatomic,copy) NSString*firstName;
@property (nonatomic,copy) NSString*lastName;
@property (nonatomic,assign) NSUInteger age;
@end
만약 내가 비교하는 규칙이 Person의 모든 필드가 같다면, 이 두 대상은 같다.
- (BOOL)isEqual:(id)object {
if (self == object) {
return YES;
}
if ([self class] != [object class]) {
return NO;
}
Person *p = (Person*)object;
if (![_firstName isEqualToString:p.firstName]) {
return NO;
}
if (![_lastName isEqualToString:p.lastName]) {
return NO;
}
if (_age!=p.age) {
return NO;
}
return YES;
}
- (NSUInteger)hash {
// return 3122;
//
// NSString *stringToHash = [NSString stringWithFormat:@"%@:%@:%i",_firstName,_lastName,_age];
//
// return [stringToHash hash];
// ( , , , )
NSUInteger fistNameHash = [_firstName hash];
NSUInteger lastNameHash = [_lastName hash];
NSUInteger ageHash = _age;
return fistNameHash^lastNameHash^ageHash;
}
또한 우리는 자신의 수요에 따라 규칙을 정하지 못해 두 대상이 같은지 아닌지를 판단할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.