对象相等性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]去判断了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 对数据的等同性判断包括对基本数据类型等同性的判断和对象等同性的判断。对基本数据类型等同性的判断是非常简单的,...
    VV木公子阅读 5,609评论 0 8
  • Objc 相等性判断 今天做任务时遇到一个问题,情况是这样的:我新建一个类,然后创建一个这个类的对象,然后将这个类...
    凌巅阅读 5,411评论 0 1
  • 为什么要有isEqual方法 对于对象类型, ==运算符比较的是对象的地址,即是否为同一对象。 对象地址相等不代表...
    人生看淡不服就干阅读 7,792评论 2 4
  • 卷首语 欢迎来到 objc.io 第七期! 这个月,我们选择了 Foundation 框架作为我们的主题。 Fou...
    评评分分阅读 5,464评论 0 8
  • 你可知道,世上有许多人,都为迷茫中度过一生。你又可知道,这世上又有那么一些人,一直坚持自己的梦想,知道自己的人生规...
    五月sn阅读 1,833评论 0 0