當你要實現相等性的時候記住這個約定:你需要同時實現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]
去判斷了。