我不清楚 NSArray 的 isEqual 方法如何比较两个数组的元素。它是否检查两个数组是否包含相同的对象(例如==)?还是在对象上使用 isEqual 比较两个数组的内容?
我发现 Apple 的这种方法的文档简洁明了。我也找不到 NSArray.m 的来源。
我不清楚 NSArray 的 isEqual 方法如何比较两个数组的元素。它是否检查两个数组是否包含相同的对象(例如==)?还是在对象上使用 isEqual 比较两个数组的内容?
我发现 Apple 的这种方法的文档简洁明了。我也找不到 NSArray.m 的来源。
现代 Cocoa 文档中没有答案,但是如果您一直回到 WebObjects 3.5 的 NSArray 文档,您会发现这个宝石:
- (BOOL)
isEqual:
(id)一个对象如果接收者和对象相等,则返回 YES;否则返回 NO。YES 返回值表示接收者和 anObject 都是从 NSArray 继承的类的实例,并且它们都包含相同的对象(由
isEqualToArray:
方法确定)。
在遗留文档之外,最接近答案的是在 Coding Guidelines for Cocoa 中对对象比较的讨论,这似乎暗示isEqual:
并且isEqualToWhatever:
应该做同样的事情,唯一的区别是类型安全的级别。
尽管如此,我还是建议提交一个错误以要求澄清文档。
Cocoa 中的所有对象都-isEqual:
默认进行比较。然而,默认版本的-isEqual:
onNSObject
会进行指针比较。因此,如果对象没有正确实现其-isEqual:
和-hash
方法,它将简单地比较指针。
也许它有点像这样!?(此处输入,可能有错别字)
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;