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
", x == y); //NSObject的默认==和isEqual默认是比较对象地址的
    printf("%d
", [x isEqual: y]);
    return 0;
}
原文地址:https://www.cnblogs.com/FdWzy/p/14164228.html