我在这里看到了几个关于 SO 的问题,其中包括函数isEqual:
而不是标准的分析器==
。
到目前为止,我只学会了使用==
,所以我想知道什么更好用,各有什么优缺点?你应该什么时候使用它们?
谢谢你。
我在这里看到了几个关于 SO 的问题,其中包括函数isEqual:
而不是标准的分析器==
。
到目前为止,我只学会了使用==
,所以我想知道什么更好用,各有什么优缺点?你应该什么时候使用它们?
谢谢你。
他们做不同的事情;所以你需要使用适当的:
考虑一下,如果你愿意:
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:
for 对象,并且如果它们有它,如果它们属于同一类(isEqualToString:
例如),则使用更具体的比较器。
==
另一方面,您可能应该只用于整数数据类型。(它们对对象意义不大,对浮点数意义不大。)
isEqual 将根据为接收者对象编写的方法比较对象
== 比较对象的地址(或它们的 C 类型变量的值,如 ints
这意味着 NSStrings == 比较地址,但 isEquals: 将查看字符串对象的值,因此类似于 strcmp
请注意,许多字符串是实习的,因此如果它们的数据相同,它们的地址也相同,因此 == 可以在测试用例中工作。