我在这里看到了几个关于SO的问题,其中包括函数isEqual:
而不是标准==
。
到目前为止,我只学会使用==
,所以我想知道什么是更好用,各自的优点和缺点是什么?你应该什么时候使用它们?
谢谢。
答案 0 :(得分: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");
换句话说; ==
只检查两个指针是否指向同一个地方,因此是同一个对象; isEqual:
检查两个对象是否相等;在这种情况下,a
和b
是相同的字符串,而c
是一个等于a
的新字符串,因为它在相同的顺序中具有相同的字符;但它有不同的类和不同的地址。
您几乎总是希望isEqual:
用于对象,如果有对象,则可以使用更具体的比较器,如果它们属于同一类(例如isEqualToString:
)。
==
应该只用于整数数据类型。 (它们对于对象没什么意义,对于浮点数则更少。)
答案 1 :(得分:1)
isEqual将根据为接收器对象编写的方法比较对象
==比较对象的地址(或它们的C类型变量的值,如整数
这意味着说NSStrings ==比较地址但isEquals:将查看字符串对象的值,因此类似于strcmp
请注意,许多字符串都是实例化的,因此如果它们的数据相同,它们的地址是相同的,所以==似乎可以在测试用例中起作用。