我不明白这段代码发生了什么:
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)
有人知道什么可以触发问题吗?
答案 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)所以条件为真,它进入循环。