iOS:NSInteger 和 NSUInteger 的比较

4

惊喜!

我有一个这样的变量,

NSInteger index = 0;

我正在将它与其中一个子视图的计数进行比较(返回NSUInteger),如下所示,
if((index-1) <= [[currentmonth subviews] count]) 
{
    NSLog(@"true");
}
else
{
    NSLog(@"false");
}

这总是返回错误的结果。

但如果我像这样做,

if ((index-1) <= 42) {
    NSLog(@"true");
} else {
    NSLog(@"false");
}

这总是返回true。

我觉得,这是因为我们不能正确地比较NSIntegerNSUInteger吗?

我发现了这个问题,当我有一个基于这个逻辑的工作解决方案。但实际上这并不是真的。

1个回答

6
我找到了这个链接,NSUInteger和NSInteger、int和unsigned等情况的区别
这个答案提供了很好的解释!
当处理NSUInteger vs. NSInteger时,您还应该了解整数转换规则:
例如,以下片段返回0(false),尽管您期望它打印1(true):
NSInteger si = -1;
NSUInteger ui = 1;
printf("%d\n", si < ui);

原因是[si]变量被隐式转换为无符号整数! 请参阅CERT's Secure Coding site,以深入了解这些“问题”及其解决方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接