Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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_Nsarray - Fatal编程技术网

Objective c 最后一个对象差异的NSArray索引

Objective c 最后一个对象差异的NSArray索引,objective-c,nsarray,Objective C,Nsarray,下面是一个包含两个数组的示例,这两个数组为其lastObject返回不同的索引 NSMutableArray *ary0 = [[NSMutableArray alloc] initWithArray:[NSArray arrayWithObjects:[NSDecimalNumber decimalNumberWithString:@"2"],[NSDecimalNumber one], nil]]; NSLog(@"%d",[ary0 indexOfObject:[ary0 lastObje

下面是一个包含两个数组的示例,这两个数组为其lastObject返回不同的索引

NSMutableArray *ary0 = [[NSMutableArray alloc] initWithArray:[NSArray arrayWithObjects:[NSDecimalNumber decimalNumberWithString:@"2"],[NSDecimalNumber one], nil]];
NSLog(@"%d",[ary0 indexOfObject:[ary0 lastObject]]);
日志1,如预期的那样

NSMutableArray *ary1 = [[NSMutableArray alloc] initWithArray:[NSArray arrayWithObjects:[NSDecimalNumber one],[NSDecimalNumber one], nil]];
NSLog(@"%d",[ary1 indexOfObject:[ary1 lastObject]]);
日志0


我看不出ary1中lastObject的索引是如何为0的,即使ary1中有两个相同的对象。有人能解释一下为什么这是有意义的,或者指出我犯了一个非常愚蠢的错误吗?谢谢

您没有得到最后一个对象的索引,而是得到第一个对象的索引,该索引等于最后一个对象。IndexOfoObject:记录为从数组的第一个元素到最后一个元素的搜索,在找到匹配项时停止

您似乎将两个不同的步骤视为一项连贯的任务。当您为
indexOfObject:
请求数组时,它将返回该对象的第一个索引。当您向数组请求其
lastObject
时,它将返回当前的最后一个对象。由于
lastObject
只返回一个普通的对象引用,而不是表示“最后一个对象”的一般概念,因此不能将它们组合起来表示“最后一个对象的索引”

因此,您需要的第一个索引包含一个等于
[NSDecimalNumber one]
的对象(两个数组中的最后一个对象)。第一个数组的答案是,索引1是第一个包含等于该值的值的数组。对于第二个数组,索引0是第一个包含等于
[NSDecimalNumber one]
的对象的数组

顺便说一句,如果您确实想要数组中最后一个对象的索引,那么它一定是
[array count]-1

试试以下方法:

NSLog(@"%p", [NSDecimalNumber one]);
NSLog(@"%p", [NSDecimalNumber one]);

你会看到他们都有相同的地址。它们是同一个物体。调用lastObject时,您将获得数组中存在两次的对象的实例,如您所说。它存在于索引0和1处。当您调用IndexOfoObject时,它会返回找到的第一个索引:0。

感谢您为患者提供的答案……这显然是在询问之前不检查文档的一个例子。