두 실례 대상이 같은지 아닌지를 비교하는 방법

4235 단어 iOS 기본(OC)
NSObject 프로토콜의 - (BOOL) isEqual: (id) object와 - (NSUInteger)hash를 다시 쓰는 EOCPerson 클래스를 만듭니다. 방법의 구체적인 실현은 다음과 같습니다.
EOCPerson.h
#import 

@interface EOCPerson : NSObject

@property(nonatomic,copy) NSString *firstName;

@property(nonatomic,copy) NSString *lastName;

@property(nonatomic,assign) NSUInteger age;

@end

EOCPerson.m
#import "EOCPerson.h"

@implementation EOCPerson

-(BOOL)isEqual:(id)object
{
    if (self == object) return YES;
    if ([self class] != [object class]) return NO;

    EOCPerson *otherPerson = (EOCPerson*)object;
    if (![_firstName isEqualToString:otherPerson.firstName]) {
        return NO;
    }
    if (![_lastName isEqualToString:otherPerson.lastName]) {
        return NO;
    }
    if (_age != otherPerson.age) {
        return NO;
    }
    return YES;
}

-(NSUInteger)hash
{
    NSUInteger firstNameHash = [_firstName hash];
    NSUInteger lastNameHash = [_lastName hash];
    NSUInteger ageHash = _age;
    return firstNameHash^lastNameHash^ageHash;
}

@end

요점

  • 같은 대상은 같은hash코드를 가지고 있다.
  • 주소가 같은 두 실례 대상은 같다.
  • [firstName hash] 문자열을 계산하는hash코드
  • 복습하다.


    ^ 비트별 또는:
    복습
    1^2 = 3
    2^3 = 1
    3^4= 7
    ...

    숫자를 2진법으로 바꾸기
    1 = 001
    2 = 010
    3 = 011
    4 = 100

    비트별 또는 조작별 해석:
    1^2 =  001
           010
          ------
           011
        = 3
    2^3 =  010
           011
          ------
           001
        = 1
    3^4 =  011
           100
          ------
           111
        = 7

    좋은 웹페이지 즐겨찾기