iOS中判断数组长度问题


昨天同事在项目中,对一个数组长度进行判断的时候,出现了一个诡异的情况。

在判读数组长度是否大于6时,使用数组长度减去6进行判断,代码如下:

  1. //初始化数据   
  2.   
  3. NSMutableArray *listArray = [[NSMutableArray alloc] initWithObjects:@"cell1",@"test2", nil];  
  4.   
  5. if ([listArray count] - 6 > 0) {  
  6.     NSLog(@"listArray数组的长度大于6");//即使数组长度为2也会打印出信息   
  7. }  

翻看数组NSArray的API后发现,数组的count属性类型是NSUInteger,对应C语言中的无符号整型,当一个整型类型的数(int 类型)和无符号整型(unsigned int类型)的数相做加减运算时,运算的结果是一个无符号整型(unsigned int)类型,所以,在上面的示例中, [listArray count] - 6 > 0 的值是大于0的,所以在进行无符号整型(unsiged int)和整型(int)的运算的时候,需要特别注意,上面代码的正确写法应该如下:

  1. //初始化数据  
  2.           
  3.         NSMutableArray *listArray = [[NSMutableArray alloc] initWithObjects:@"cell1",@"test2", nil];  
 
  1. int judgeCase = [listArray count] - 6 ;//将unsiged类型的值强制转化成int类型  
  2. if (judgeCase > 0) {  
  3.     NSLog(@"listArray数组的长度大于6");//即使数组长度为2也会打印出信息  
  4. }  

相关内容