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;
}

 

posted @ 2020-12-20 17:23  NeoZy  阅读(172)  评论(0编辑  收藏  举报