在我的部分代码中,我正在编写一个简单的for循环来迭代数组中的元素(所有NSMutableDictionarys),并且我发现循环执行即使条件基本上是1 <-1.
所以我编写了以下代码,以测试此问题的有效性:
NSMutableArray* arr = [[NSMutableArray alloc] init];
NSLog(@"COUNT: %d | %i", arr.count, 1 < (arr.count - 1));
Run Code Online (Sandbox Code Playgroud)
输出是:
COUNT: 0 | 1
Run Code Online (Sandbox Code Playgroud)
这实际上意味着计数为0,并且1小于-1.
我想也许是因为数组是刚刚初始化的,可能添加和删除一个对象可能会改变这一点,所以我继续这样做:
NSMutableArray* arr = [[NSMutableArray alloc] init];
[arr addObject:@1];
[arr removeObject:@1];
NSLog(@"COUNT: %d | %i", arr.count, 1 < (arr.count - 1));
Run Code Online (Sandbox Code Playgroud)
结果仍然相同:
COUNT: 0 | 1
Run Code Online (Sandbox Code Playgroud)
我想到的可能原因是:
我非常怀疑它是最后两个案例中的哪一个,我仍然想知道为什么会这样.
arr.count是无符号整数值(类型NSUInteger).使用无符号算术,(0 - 1)包围一个非常大的正数,而不是-1.
如果将值转换为有符号整数,您可能会看到预期的结果:
NSLog(@"COUNT: %d | %i", (int)arr.count, 1 < ((int)arr.count - 1));
Run Code Online (Sandbox Code Playgroud)
有关处理此常见错误源的一些方法,请参阅此主题:[NSArray count]中的常量错误未签名