最近我遇到了一个问题,比较有符号和Objective-C中的无符号值。下面是这个问题的一个例子:比较有符号和Objective-C的无符号值
NSArray *array = [NSArray array];
NSLog(@"Count = %d", array.count);
NSLog(@"Count - 2 = %d", array.count - 2);
if (array.count - 2 > 0) {
NSLog(@"A");
} else {
NSLog(@"B");
}
在它看来,下面的代码应打印B
第一眼。然而,当你运行它,这就是你看到的:
Count = 0
Count - 2 = -2
A
现在我知道这个问题是比较有符号和无符号值(array.count
是unsigned long
)。
但是,这种错误很难找到(代码编译,没有警告,你可能没有注意到array.count
是未签名的,它很重要)。 问题是我该如何避免这种情况?有没有比较有符号值和无符号值的安全方法?
这也很有趣为什么NSLog(@"%d", array.count - 2)
打印-2
?