今天遇到一个问题 ,简单描述如下
int index = -1;
NSMutableArray *arr = [NSMutableArray array];
[arr addObject:@"a"];
[arr addObject:@"b"];
NSLog(@"%d",[arr count]);
if (index>[arr count]) {
NSLog(@"所谓不可能的事出现了");
}else if (index==[arr count])
{
NSLog(@"这不可能");
}
else {
NSLog(@"应该如此啊");
}
我们可以看到 index = -1,[arr count] = 2 , 执行结果却打印的是 :所谓不可能的事出现了
思考下。。。。
[arr count] 返回的是 NSUInteger 也就是 unsigned int (uint) 类型 ,
当 int 与 unsigned int (uint) 比较时, unsigned int (uint) 向 int 转化, -1转成4294967295 那么在判断时 就出现了所谓的 -1>2
而 NSUInteger 也就是 unsigned int (uint) 向 int 转化时却不会有问题 因此 NSLog(@"%d",[arr count]); 打印出来的是2
备忘:
在使用 [NSarray count] 时要时刻谨记 返回的值是 NSUInteger 也就是 unsigned int (uint) 类型 。
所以下列的循环应该这么写
for (int i=-1; i<(int)[arr count]; i++) {
NSLog(@"%d",i);
}