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

And*_*son 0 cocoa cocoa-touch objective-c

我知道==,在比较指向同一对象的变量的情况下,它通常可用于对象比较.然而,即使在这些情况下,我认为isEqual:总是有效的.

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

我倾向于认为通过总是使用isEqual:,您可以更容易地判断代码是否一目了然.

Jea*_*ean 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");
}
Run Code Online (Sandbox Code Playgroud)

只会输出:

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

笔记:

我没用过:

NSString* str1 = @"Hello World!";
NSString* str2 = @"Hello World!";
Run Code Online (Sandbox Code Playgroud)

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