使用不等式运算符来比较对象

时间:2015-05-08 05:32:19

标签: ios equality

使用!=这里似乎对我不对。我们正在比较对象,所以isEqual应该是正确的方法吗?

除非NSNull null返回具有一致内存地址的单例?

if ([super actionForLayer:layer forKey:@"backgroundColor"] != [NSNull null]) {
// whatever
}

尼克·洛克伍德正在他的要点中使用这个here这是一个很酷的阅读顺便说一句

2 个答案:

答案 0 :(得分:2)

==运算符检查两个指针​​是否指向相同的对象,而isEqual检查对象的内容是否相同,但两个对象指针可能没有指向同一个地址。

NSString *s1 = [NSString stringWithFormat:@"Hello"];
NSString *s2 = s1;
NSString *s3 = [NSString stringWithFormat:@"Hello"];

if (s1 == s2)
    NSLog(@"result 1");

if (s2 == s3)
    NSLog(@"result 2");

if ([s1 isEqual:s2])
    NSLog(@"result 3");

if ([s2 isEqual:s3])
    NSLog(@"result 4");

if (!([s2 isEqual:s3])) //Not equal for objects (change value to see)
    NSLog(@"result 5");

//prints pointer addresses
NSLog(@"%p", s1);
NSLog(@"%p", s2);
NSLog(@"%p", s3);

答案 1 :(得分:-2)

除非在类中重写isEqual,否则==和isEqual之间没有区别。