【问题标题】:Sprite Kit Only Warning for Array Count仅针对数组计数的 Sprite Kit 警告
【发布时间】:2013-09-26 12:42:48
【问题描述】:

在 iOS 7 Sprite Kit 中

    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);

只是想知道为什么。

谢谢

【问题讨论】:

    标签: ios warnings nsuinteger sprite-kit


    【解决方案1】:

    将无符号类型转换为整数类型时可能会出现问题。具体来说,如果无符号类型的值高于INT_MAX / 2,则整数值将变为负数。

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

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

    注意到问题了吗?

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

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

    【讨论】:

    • 谢谢,所以我的解决方法实际上是正确执行此操作的唯一方法?
    • 这不是一种解决方法,它只是正确的代码。如果不是 100% 的情况,带有警告的代码示例在 99.9% 的情况下仍然有效,但如果 temp 包含大量项目(即 2+十亿),则会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多