3

我不清楚 NSArray 的 isEqual 方法如何比较两个数组的元素。它是否检查两个数组是否包含相同的对象(例如==)?还是在对象上使用 isEqual 比较两个数组的内容?

我发现 Apple 的这种方法的文档简洁明了。我也找不到 NSArray.m 的来源。

4

4 回答 4

7

现代 Cocoa 文档中没有答案,但是如果您一直回到 WebObjects 3.5 的 NSArray 文档,您会发现这个宝石:

- (BOOL) isEqual:(id)一个对象

如果接收者和对象相等,则返回 YES;否则返回 NO。YES 返回值表示接收者和 anObject 都是从 NSArray 继承的类的实例,并且它们都包含相同的对象(由isEqualToArray:方法确定)。

在遗留文档之外,最接近答案的是在 Coding Guidelines for Cocoa 中对对象比较的讨论,这似乎暗示isEqual:并且isEqualToWhatever:应该做同样的事情,唯一的区别是类型安全的级别。

尽管如此,我还是建议提交一个错误以要求澄清文档。

于 2012-09-03T22:07:41.743 回答
4

文档很清楚:

如果两个数组都包含相同数量的对象并且每个数组中给定索引处的对象满足 isEqual: 测试,则它们具有相同的内容。

这意味着isEqual(而不是==)将用于测试对象是否相等。

于 2012-09-03T13:43:21.163 回答
2

Cocoa 中的所有对象都-isEqual:默认进行比较。然而,默认版本的-isEqual:onNSObject会进行指针比较。因此,如果对象没有正确实现其-isEqual:-hash方法,它将简单地比较指针。

于 2012-09-03T13:42:40.377 回答
1

也许它有点像这样!?(此处输入,可能有错别字)

if(![array1 isKindOfClass:[NSArray class]] || ![array2 isKindOfClass:[NSArray class]])
 return NO;

if(array1 == array2)
 return YES;

if(array1.count != array2.count)
 return NO;

for(int i =0; i<array1.count;i++)
 if(![array1[i] isEqual:array[i]])
  return NO;

return YES;
于 2012-09-04T08:00:10.170 回答