Objective-c,在空NSArray上迭代时的奇怪行为

Objective-c,在空NSArray上迭代时的奇怪行为,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,我不明白这段代码是怎么回事: SorterDarray是NSMutableArray,它是空的,因此SorterDarray.count的值为0 for(整数i=0;i

我不明白这段代码是怎么回事:

SorterDarray是NSMutableArray,它是空的,因此SorterDarray.count的值为0

for(整数i=0;i<(sortedArray.count-1);i++)
NSLog(@“显然%d<%d([sortedArray count]%d)”,i,sortedArray.count-1,[sortedArray count]);
因此,我们不应该进入循环,但我在日志中看到以下内容:

2014-01-21 12:11:16.433 AppName[445:60b]显然0<-1( [光线计数]0)

有人知道什么会引发问题吗

(sortedArray.count -1)
是一个无符号整数0,它试图从自身减去一,因此您的
-1
被解释为
nsuigermax

是一个无符号整数0,它试图从自身减去一,因此您的
-1
被解释为
nsuigermax
,您可以(也应该)使用:

for (NSUInteger i = 0; i < sortedArray.count; i++) 
for(整数i=0;i
因为测试
i
将返回
NO
,因为0不小于0。如果数组有内容,则当前代码不会迭代数组中的最后一个对象。

您可以(而且应该)只使用:

for (NSUInteger i = 0; i < sortedArray.count; i++) 
for(整数i=0;i

因为测试
i
将返回
NO
,因为0不小于0。如果数组有内容,则当前代码不会迭代数组中的最后一个对象。

问题在于逻辑,您的条件应该是:

for (NSUInteger i = 0 ; i <= (sortedArray.count -1) ; i++) 

对于(i=0;i问题在您的逻辑中您的条件应该是:

for (NSUInteger i = 0 ; i <= (sortedArray.count -1) ; i++) 

for(整数i=0;i这是正常的i=0,i应该小于0(数组计数)-1,它等于-1。所以(i=0&&i<-1)。听起来不错?这是正常的i=0,我应该小于0(数组计数)-1,它等于-1。所以(i=0&&i<-1).听起来不错?这就是重点:我在比较循环中的第I个元素和第I+1个元素(此处未显示)。这没什么错。这就是重点:我在比较循环中的第I个元素和第I+1个元素(此处未显示)。这没什么错。让我明白的是打印(sortedArray.count-1)在日志中打印-1。使用%d导致转换为带符号整数。让我明白的是,在日志中打印(sortedArray.count-1)打印-1。使用%d导致转换为带符号整数。