4

我在这里看到了几个关于 SO 的问题,其中包括函数isEqual:而不是标准的分析器==

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

谢谢你。

4

2 回答 2

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:检查两个对象是否相等;在这种情况下ab是相同的字符串,而c是一个等于 的新字符串,a因为它具有相同顺序的相同字符;但它有不同的类别和不同的地址。

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

==另一方面,您可能应该只用于整数数据类型。(它们对对象意义不大,对浮点数意义不大。)

于 2010-09-18T10:23:54.243 回答
1

isEqual 将根据为接收者对象编写的方法比较对象

== 比较对象的地址(或它们的 C 类型变量的值,如 ints

这意味着 NSStrings == 比较地址,但 isEquals: 将查看字符串对象的值,因此类似于 strcmp

请注意,许多字符串是实习的,因此如果它们的数据相同,它们的地址也相同,因此 == 可以在测试用例中工作。

于 2010-09-18T10:24:26.500 回答