你应该使用'isEqual'还是'=='?

Emi*_*mil 4 iphone comparison equality objective-c equals-operator

我在SO上看到了几个问题,包括函数isEqual:而不是标准的ansers ==.

到目前为止,我只学会使用它==,所以我想知道什么是更好的使用,每个的优点和缺点是什么?你应该什么时候使用它们?

谢谢.

Wil*_*and 9

他们做不同的事情; 所以你需要使用适当的:

考虑一下,如果你愿意:

NSString *a = @"Hello!";
NSString *b = a;
NSString *c = [a mutableCopy];

if (a == b) NSLog(@"This prints");
if (b == c) NSLog(@"This doesn't");
if ([a isEqual:c]) NSLog(@"This does");
Run Code Online (Sandbox Code Playgroud)

换一种说法; ==只检查两个指针​​是否指向同一个地方,因此是同一个对象; isEqual:检查两个对象是否相等; 在这种情况下a,b它们是相同的字符串,c而是一个等于的新字符串,a因为它具有相同顺序的相同字符; 但它有不同的类和不同的地址.

您几乎总是希望isEqual:用于对象,如果有对象,则可以使用更具体的比较器,如果它们属于同一类(isEqualToString:例如).

==另一方面,您应该只用于整数数据类型.(它们对于对象没什么意义,对于浮点数则更少.)

  • 小心,`[副本]`可能会返回相同的对象,因为它是一个不可变的字符串. (2认同)