对象之间的对比相同操作,一般会想到==操作符,但是在Objective-C ==操作符比较出来的结果未必是我们想要的,因为该操作比较的是两个指针本身,而不是其所指的对象。应该使用NSObject协议中声明的“isEqual”:方法来判断两个对象的等同性。
NSString *foo = @“Badger 123”;
NSString *bar = [NSString stringWithFormat:@"Badger %i",123];
BOOL equalA = (foo == bar); // NO
BOOL equalB = [foo isEqual:bar]; //YES
BOOL equalC = [foo isEqualToString:bar]; //YES
NSObject 协议中 hash 也是判断等同性的操作 与 isEqual 一样
1,若想检测对象的等同性,请提供“isEqual:”与hash方法
2,相同的对象必须具有相同的哈希吗,但是两个哈希吗相同的对象却未必相同
3,不要盲目地逐个检测每条属性,而是应该依照具体需求制定检测方案
4,编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算算法
网友评论