Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSArray等质量方法的清晰描述?_Objective C_Cocoa - Fatal编程技术网

Objective c NSArray等质量方法的清晰描述?

Objective c NSArray等质量方法的清晰描述?,objective-c,cocoa,Objective C,Cocoa,我不清楚NSArray的isEqual方法如何比较两个阵列的元素。它是否检查两个数组是否包含相同的对象(例如==)?还是在对象上使用isEqual比较两个数组的内容 我发现苹果公司关于这种方法的文档简洁而不清楚。我也找不到NSArray.m的源。默认情况下,Cocoa中的所有对象都与-isEqual:进行比较。但是,NSObject上的-isEqual:的默认版本执行指针比较。因此,如果对象没有正确实现它的-isEqual:和-hash方法,它只会比较指针 问题很清楚: 如果两个数组都包含相同数

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


我发现苹果公司关于这种方法的文档简洁而不清楚。我也找不到NSArray.m的源。

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

问题很清楚:

如果两个数组都包含相同数量的对象,并且每个数组中给定索引处的对象满足isEqual:test,则两个数组的内容相等


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

现代Cocoa文档中没有答案,但如果你去,你会发现这个宝石:

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

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

除了遗留文档之外,最接近答案的是Cocoa的编码指南,这似乎意味着
isEqual:
IseQualTowhere:
应该做同样的事情,唯一的区别是类型安全级别


尽管如此,我还是建议要求澄清这些文件。

也许是这样的!?(在此处键入,因此可能会出现打字错误)

if(![array1 isKindOfClass:[NSArray class]]| |![array2 isKindOfClass:[NSArray class]]))
返回否;
if(array1==array2)
返回YES;
if(array1.count!=array2.count)
返回否;

对于(int i=0;iYou是对的,NSObject isEqual的文档充其量是不清楚的,isEqualToArray的文档没有说明它是否等同于isEqual。(然而,从字里行间看,我大约有95%的信心NSArray isEqual只是调用ISEQUALTOARY,后者适当地级联比较。)如果您确实需要源代码,这可能很有用……Cocoa的源代码尚未打开。但是,您可以将特定类的某些对象放入数组中,并在该类的
isEqual:
上设置断点,以查看在将
isEqual:
发送到数组时它是否被命中。文档非常不清楚。我花了几分钟时间查找g,找不到有关NSArray isEqual的任何文档,而NSObject isEqual的文档没有说明如何处理NSArray(除了告诉您查看NSArray文档)。您引用的是
isEqualToArray:
,而不是
isEqual:
@HotLicks的文档。我不同意。Cocoa中的对象与
-isEqual:
方法进行比较,句号,而不仅仅是
==
。我认为文档很清楚,因为容器对象具有指定精确的
-isEqualTo.
类型方法如果你简单地在这些容器上调用
-isEqual:
,它们只会检查对象是否是同一个类,然后调用适当的比较方法。规范没有(我能找到的任何地方)详细说明
isEqual
是如何应用于NSArrays的。这是OP的抱怨。这是我所期望的。我希望有人能肯定地证实。
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;