FOR命令中的表达式(for(int i = 0; i<([arr count] -1); i ++){})

时间:2013-06-11 08:10:41

标签: ios objective-c

我有一个我无法理解的问题

NSArray *emptyArr = @[];
for (int i=0; i < ([emptyArr count]-1) ; i++) {
    NSLog(@"Did run for1");
}

[emptyArr count] - 1为-1,但我的应用仍然运行NSLog命令!

如果我使用int变量:

NSArray *emptyArr = @[];
int count = [emptyArr count]-1;
for (int i=0; i < count ; i++) {
    NSLog(@"Did run for1");
}

然后我的应用程序没有运行NSLog命令。

任何人都可以帮助我!

3 个答案:

答案 0 :(得分:6)

这是因为count的返回类型是无符号 int。当你从0减去1时,你得不到-1。相反,您可以下流至尽可能高的unsigned int。它在第二个版本中工作的原因是因为你(隐式地)将其强制转换为{-1}},其中值为-1是合法的。

答案 1 :(得分:0)

[emptyArr count]-1永远不会小于0,因为它是无符号的。我猜你是否((int)[emptyArr count]-1),你会得到正确的行为。

答案 2 :(得分:0)

[emptyArr count]返回的值是无符号整数。 在第一种情况下, [emptyArr count] -1是0-1表示为2的恭维,这是一个巨大的数字。 所以它会多次打印日志。

在第二种情况下, [emptyArr count] -1 - &gt;您将此结果转换为int。 0-1 - &gt; -1签名int。 因此不打印。