我有一个我无法理解的问题
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
命令。
任何人都可以帮助我!
答案 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。 因此不打印。