根据“等同性”来对比对象我们经常用到。
==操作符比较的是两个指针本身,而不是其所指的对象。应该使用NSObect协议中声明的“isEquel:”方法来判断两个对象的等同性。
NSString类实现了自己独有的等同性判断方法,“isEqualToString:”。比对NSString对象,调用该方法比调用“isEquel:”快,后者还要执行额外的步骤,因为不知道受测对象的类型。
NSObect协议中有两个判断等同性的关键方法:
- (BOOL)isEqual:(id)object;
+ (NSUInteger)hash;
当且仅当其“指针值”(可以理解为内存地址)完全相等时,这两个对象才相等。若自定义对象覆写这些方法,必须先理解其约定:如果“isEquel:”方法判定两个对象相等,那么其hash方法也必须返回同一个值。但是,如果两个对象的hash方法返回同一个值,那么“isEquel:”方法未必会认为两者相等。
覆写“isEquel:”方法步骤:
1、判断两个指针是否相等,相等则是同一对象。
2、判断所属的类
3、检测每个属性是否相等。
覆写hash方法,应该使用计算速度快而且哈希码碰撞几率低的算法。
特定类所具有的等同性判定方法
NSArray类有"isEqualToArray:"方法。
NSDictionary类有"isEqualToDictionary:"方法。