美文网首页
对象等同性 ——[isEqual]方法的实现

对象等同性 ——[isEqual]方法的实现

作者: Daeva_Song | 来源:发表于2017-03-20 15:22 被阅读21次

对象等同性是比对两个对象非常有用的功能。但一般情况 == 操作符比对出来的结果可能并不准确或并不是我们想要的,因为 == 比对的是两个指针本身,并不是指针所指的对象。

不如NSString类就有一个自己的对象等同性判断方法 isEqualToString:。这个方法比isEqual:执行速度更快,因为后者还需要判断对象类型,而isEqualToString:只能传入NSString类型。

NSObject协议中有两个用于判断对象等同性的方法

- (BOOL)isEqual:(id)object;

- (NSUInteger)hash;

这两个方法的实现机制是,当且仅当指针完全相等时两个对象才相等。所以如果想重写这两个方法,如果isEqual:方法判断两个对象相等,那么hash方法也必须返回同一个值。

比如以下这个例子:

有Person这个类

我们如果认为Person的firstName,lastName,age都相等,那么两个Person的对象就相等,那么isEqual:方法就可以写成:

接下来实现hash方法。因为两个对象的hash算法以属性值的唯一性来确保对象的差异性,也就是说,只要两个对象属性值一致,那这两个对象的就是相等的。NSObject自带的hash方法相当于hash表中的f(key)函数中的key,这“唯一”的key需要用户自己产生,至于用什么算法由用户自己决定,所以,只要我们规定一种不会产生重复hash码的方法即可。

比如

使用hash方法,所以我们的isEqual:方法就可以写成

大功告成。

相关文章

  • 对象等同性 ——[isEqual]方法的实现

    对象等同性是比对两个对象非常有用的功能。但一般情况 == 操作符比对出来的结果可能并不准确或并不是我们想要的,因为...

  • 第8条: 理解"对象等同性"这一概念

    ==操作符比较的是两个指针本身,而不是其所指的对象isEqual: 方法来判断两个对象的等同性 NSObject协...

  • (八) [OC高效系列]理解对象等同性

    1.对象等同性约定 2.isEqual的正确书写方式 以如下类为例: isEqual的正确书写方式 3.hash值...

  • 8.对象等同性

    1、NSObject协议中有两个判断等同性的方法- (BOOL)isEqual:(id)object;+ (NSU...

  • 相等性

    当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual...

  • 对象相等性isEqual

    当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual...

  • [16]Effective Objective-C 2.0【8-

    第八条:理解“对象等同性”这一概念 isEqualToString 比isEqual 快,因为后者还要之行额外的步...

  • 对象等同性-isEqual: 和- hash

    根据等同性来比较对象是一个非常有用的功能。不过,按照==操作符得到的结果未必使我们想要的。该操作比较的是两个指针本...

  • iOS补充知识

    1、Hash方法与isEqual 1.1、== 运算符判断对象内存地址是否相同 1.2、isequal判断对象是否...

  • 【知识总结】利用NSSet 过滤重复对象

    NSObject协议中有两个用于判断对象等同性的方法 例子: 对象结构如上 确定等同性规则 1,age相同即为相等...

网友评论

      本文标题:对象等同性 ——[isEqual]方法的实现

      本文链接:https://www.haomeiwen.com/subject/neybnttx.html