最近我遇到了一個問題,比較有符號和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
?