我不清楚NSArray的isEqual方法如何比较两个数组的元素。是否检查两个数组是否包含相同的对象(例如==)?还是在对象上使用isEqual比较两个数组的内容?
我发现Apple的这种方法的文档简洁而且不清楚。我也找不到NSArray.m的来源。
答案 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;