0
NSString *yes0 = @"yes";
NSString *yes1 = @"YES";
NSString *yes2 = @"Yes";
NSString *yes3 = [NSString stringWithFormat:@"%@",yes1];

NSArray *yesArray = [NSArray arrayWithObjects:@"yes", @"YES", @"Yes", @"YES", nil];

NSArray *yesArray1 = [NSArray arrayWithObjects:yes0, yes1, yes2, yes3, nil];
NSUInteger index;


index = [yesArray indexOfObjectIdenticalTo:yes3];
NSLog(@"\nindex : %d",  index); // 1st Output


index = [yesArray1 indexOfObjectIdenticalTo:yes3];
NSLog(@"\nindex : %d",  index); // 2nd Output
  • 第一个输出

我收到的输出是:“2013-07-18 16:42:04.896 Collections - Arrays[2778:f803] index : 2147483647”

  • 第二输出

我收到的输出是:“2013-07-18 16:42:04.896 Collections - Arrays[2778:f803] index : 3”

由于收到的输出,我感到困惑。请解释一下为什么我在输出 1 中得到垃圾值的过程。据我所知,两个数组都与对象相同。那为什么这个垃圾值。

还有一个问题:

根据苹果的说法,indexOfObjectIdenticalTo:返回 - 对应数组值与 anObject 相同的最低索引。

据我了解,在 yesArray1 - yes1与yes3相同。我的期望值output 2为 1,这与实际打印值 (3) 相矛盾。另外请让我正确理解为什么它打印 3 而不是 1。

4

3 回答 3

2

首先,它不是“垃圾值”,而是NSNotFound常数。

第一个index没有找到,因为yes3is not in yesArray(它只是 in yesArray1)——注意indexOfObjectIdenticalTo:检查指针标识,而不是对象相等性(不像indexOfObject:)。

于 2013-07-18T11:26:14.973 回答
1

indexOfObjectIdenticalTo检查指针是否相等,而不是对象相等。2147483647不是垃圾值,它的值NSNotFound(如果没有找到索引,这是定义的结果)。

于 2013-07-18T11:26:21.730 回答
0
indexOfObjectIdenticalTo : checks for pointer equality

indexOfObject: checks Object equality.

Good Luck !!!
于 2013-07-18T12:31:12.293 回答