理解 '对象等同性' 概念
理解: 根据'等同性' 来比较对象是一个非常有用的功能, 不过按照 == 操作符比较出来的结果未必是我们想要的, 因为该操作比较的是两个指针本身, 而不是其所指的对象, 应该使用 NSObject 协议中声明的 'isEqual' : 方法来判断两个对象的等同性, 一般来说, 两个类型不同的对象总是不相等的, 如果已经知道两个手册对象都属于同一个类, 那么就可以使用这种方法
NSObject 协议有两个判断等同性的关键方法
- (BOOL) isEqua:l(id)object;
- (NSInteger)hash;
NSObject 类对这两个方法的默认实现是: 当且仅当 '其指针' 完全相等时, 这两个对象才相等, 如果 'isEqual' 方法判定两个对象相等, 那么其 'hash' 方法也必须返回同一个值, 但是, 如果两个对象那个的 hash 方法返回同一个值, 那么 'isEqual' 方法未必会认为两个值相等.
如果在自定义的对象中覆写这些方法, 首先,直接判断两个指针是相等, 若想等, 则其均指向同一对象, 所受测的对象也必定相等, 接下来, 比较两对象所属的类, 若不属于同一类, 则量对象不相等, 不过, 有时候我们可以认为, 一个类实例 可能与其子类实例相等, 所以要考虑这种情况, 最后,检测每个属性是否相等.
特定类所具有的等同性判定方法
数组和字典也具有特殊的等同性判定方法, isEqualToArray: isEqualToDictionary: