始终使用isEqual是不错的形式:在Objective-C中进行对象比较?

时间:2013-04-04 18:52:45

标签: objective-c cocoa-touch cocoa

我知道==通常可用于对象比较,前提是您要比较指向同一对象的变量。但是,即使在这些情况下,我认为isEqual:始终有效。

当您认为比较指针时尝试使用==是否更好?或者在不比较基元时是否应始终使用isEqual:

我倾向于认为通过始终使用isEqual:,您可以更轻松地判断代码是否一目了然。

2 个答案:

答案 0 :(得分:11)

正如您所说,使用==将比较指针。使用它,您知道这两个对象是否是同一个实例。

使用isEqual:比较他们的值。

两个不同的NSString可以包含相同的文本:Hello World!。它们的地址不同(两个不同的对象)但它们的值将是相同的。

在这种情况下,==将返回NOisEqual:应返回YES

示例:

NSString* str1 = @"Hello World!";
NSString* str2 = [@"Hello " stringByAppendingString:@"World!"];

if (str1 == str2)
{
    NSLog(@"str1 == str2");
}

if ([str1 isEqualToString:str2])
{
    NSLog(@"str1 is equal to str2");
}

仅输出:

  

2013-04-04 21:04:18.365测试[7310:303] str1等于str2

备注:

我没有使用:

NSString* str1 = @"Hello World!";
NSString* str2 = @"Hello World!";

因为编译器为文字生成单个对象。在这种情况下,两个等式(==isEqual:)都会得到满足。

答案 1 :(得分:2)

我认为两者之间存在重要区别。

假设您测量房屋左右墙的长度: 左墙长= 5米,右墙长= 5米

isEqual会告诉您两个测量值相同的距离(5m)

==会告诉你,你不只是两次测量同一面墙。

我希望这是有道理的