-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
在 iOS 中,判断两个对象内容是否相等,一般调用 isEqual 方法。用 == 来判断两个对象是否相等,其实是判断两个对象的地址是否相等。isEqual 系统默认实现是比较两个对象的指针。所以在项目中如果需要指定一套自己判断两个对象是否相同的标准的时候就需要重写isEqual,
hash 方法的存在,是因为将对象加到 NSSet 等集合中时,需要利用对象的 Hash 值来标示对象在集合中的位置,将集合查找元素的时间复杂度优化成 O(1)。对于 Hash 值,系统默认是返回该对象的内存地址。下面是一般isEqual和hash的写法模版。
- (BOOL)isEqual:(id)object {
//1. == 判断地址
if (self == object) return YES;
//2.isKindOfClass 判断对象类型
if (![object isKindOfClass:[self class]]) return NO;
//3. 进行业务逻辑判断
return [self isEqualToFather:(Father *)object];
}
- (BOOL)isEqualToFather:(Father *)object {
//业务逻辑
if ([self.name isEqualToString:object.name]) {
return YES;
}else {
return NO;
}
}- (NSUInteger)hash {
return [self.name hash] ^ [self.birthday hash];
}Metadata
Metadata
Assignees
Labels
No labels