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

时间:2014-01-21 11:16:08

标签: objective-c nsmutablearray nsarray

我不明白这段代码发生了什么:

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

     for (NSUInteger i = 0 ; i < (sortedArray.count -1) ; i++) 
         NSLog(@"Apparently %d < %d  ( [sortedArray count] %d)", i, sortedArray.count-1, [sortedArray count] );

因此,我们永远不应该进入循环,但我在日志中看到以下内容:

  

2014-01-21 12:11:16.433 AppName [445:60b]显然为0&lt; -1(   [sortedArray count] 0)

有人知道什么可以触发问题吗?

3 个答案:

答案 0 :(得分:5)

(sortedArray.count -1)

是一个无符号整数0,试图从中减去一个,因此-1被解释为NSUIntegerMax

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

问题在于你的逻辑应该是:

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

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

在你的例子中,你从零中减去1,这给你-1,所以-1小于(sortedArray.count -1)所以条件为真,它进入循环。