先看下面的代码,你觉得输出什么结果呢:
NSArray *ary = @[];
NSLog(@"%@",@([ary count] - 1));
很多人会以为结果为 -1,但是,结果却是一个无穷大的数。这里就有一个陷阱,查看数组的count属性,可以发现它是一个无符号整数,所以计算结果也是无符号整数:
@property (readonly) NSUInteger count;
其实这点大家都知道,但是在使用的过程中总是忽略,导致bug的产生。例如:
if ([ary count] - 1 > 0) {
NSLog(@"数组里元素个数大于1");
}
从上面的分析我们可以知道,这个if判断是有问题的,当数组中没有元素时,if中也是YES,正确的写法应该是:
if ([ary count] > 1) {
NSLog(@"数组里元素个数大于1");
}
总结:不要对 [ary count] 直接做运算,或者将它的运算结果先赋值给一个有符号整数进行类型转换再做其他的事情:
NSInteger i = [ary count] - 1;
NSLog(@"%@",@(i));
2016-08-24 19:49:37.076 Test[4283:2361248] -1