OC的==只能用来判断基本数据类型,如果用来判断其他类型,实际比较的是内存地址(显然不同对象用==比较一定会返回false);由于不像C++有运算符重载,OC中使用isEqual来判断两个对象的内部值是否相同。
注意,默认isEqual和==是一样的,对于NS对象都是比较内存地址(对于非NS对象当然只需要而且也只有==了)
所以我们重载isEqual来判断两个NS对象是否相等。要保持isEqual和Hash逻辑一致,所以isEqual和hash方法要一起改!!!
重载hash方式:In reality, a simple XOR over the hash values of critical properties is sufficient 99% of the time(对关键属性的hash值进行位或运算作为hash值)
https://www.jianshu.com/p/a26e74f981b0
@import Foundation;
@interface MyClass : NSObject
@end
@implementation MyClass
@end
int main(int argc, char* argv[]) {
MyClass *x = [[MyClass alloc] init];
MyClass *y = [[MyClass alloc] init];
printf("%d\n", x == y); //NSObject的默认==和isEqual默认是比较对象地址的
printf("%d\n", [x isEqual: y]);
return 0;
}