0

在 iOS 7 精灵套件中

    NSMutableArray *temp = [[NSMutableArray alloc] init];
    int x = [temp count];
    NSLog(@"%02d", x);

这个简单的例子产生了这个警告

隐式转换失去整数精度:“NSUInteger”(又名“unsigned long”)到“int”

在标准应用程序项目中,完全相同的代码不会产生此警告。

这不是一个大问题,我可以解决这个问题

    NSMutableArray *temp = [[NSMutableArray alloc] init];
    NSUInteger x = [temp count];
    NSLog(@"%02lu", x);

只是想知道为什么。

谢谢

4

1 回答 1

0

将无符号类型转换为整数类型时可能会出现问题。特别是如果无符号类型的值高于INT_MAX / 2整数值将变为负数。

启用此警告并修复任何此类警告通常是一个好主意。例如,这是一种反过来有问题的情况:

if (NSUInteger i = 100; i < 0; i--)
{
    // do stuff
}

注意到问题了吗?

经验法则:始终关心整数的有符号性,永远不要忽略有符号/无符号不匹配警告。

警告仅出现在 Sprite Kit 中可能只是与更新后的不同项目模板有关。

于 2013-09-26T19:58:47.870 回答