当你要实现相等性的时候记住这个约定:你需要同时实现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中查找是否包含某个对象,可以通过重写isEqual
和hash
方法去判断的,就可以使用[array containsObject:user]
去判断了。