NSArray isEqual方法的清晰描述?

时间:2012-09-03 13:39:39

标签: objective-c cocoa

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

我发现Apple的这种方法的文档简洁而且不清楚。我也找不到NSArray.m的来源。

4 个答案:

答案 0 :(得分:6)

现代Cocoa文档中没有答案,但是如果你去all the way back to WebObjects 3.5's NSArray documentation,你会发现这个宝石:

  

- (BOOL)isEqual:(id)anObject

     

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

在旧版文档之外的答案最接近的是Cocoa Coding Guidelines中的this discussion of object comparison,这似乎意味着isEqual:isEqualToWhatever:应该做同样的事情,唯一的区别是类型安全级别。

不过,我建议filing a bug要求澄清文件。

答案 1 :(得分:3)

documentation很清楚:

  

两个数组具有相同的内容,如果它们各自拥有相同数量的对象,并且每个数组中给定索引处的对象满足isEqual:test。

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

答案 2 :(得分:2)

默认情况下,Cocoa中的所有对象都与-isEqual:进行比较。但是,-isEqual:NSObject的默认版本会进行指针比较。因此,如果对象没有正确实现其-isEqual:-hash方法,那么它将简单地比较指针。

答案 3 :(得分: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;