对象相等性isEqual

当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual认为相等的,它们的 hash 方法需要返回一样的值。但是如果 hash 返回一样的值,并不能确保他们相等。

@implementation WDUser

- (BOOL)isEqual:(id)object {
    if (self == object) {
        return YES;
    }

    if (![object isKindOfClass:[ZOCPerson class]]) {
        return NO;
    }

    // 检查对象属性(uid, name)的相等性,这里认为uid一致,则表示同一个对象
    BOOL isUidEqual = [self.uid isEqualToString:[(WDUser *)object uid]];
    BOOL isNameEqual = [self.name isEqualToString:[(WDUser *)object name]];
    
    return isUidEqual && isNameEqual;
}

- (NSUInteger)hash {
    return [self.uid hash] ^ [self.name hash];
}

@end

在NSArray, NSSet, 或者 NSDictionary中查找是否包含某个对象,可以通过重写isEqualhash方法去判断的,就可以使用[array containsObject:user]去判断了。

你可能感兴趣的:(对象相等性isEqual)