OC中==和isEqual
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值)
@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; }
进击的小🐴农