我可以安全地为“常见”项目压制整数签名转换编译器警告吗?

时间:2014-10-31 18:16:06

标签: ios objective-c type-conversion compiler-warnings signed

我有一个在iOS 5,6和7中运行良好的遗留项目。不确定哪个Xcode启动它,但我看到很多"比较不同符号的整数int和NSUInteger(又名unsigned int)"警告。

以下代码会导致此类警告:

 for (int i = 0; i < names.count ; i++) // warning here
    {
        [self.images addObject:[NSNull null]];
    }
 for (NSString* name in names)
    {
        int index = [names indexOfObject:name];// warning here
    }

如果我正在做一些科学项目或正在构建一个计算器并正在使用真正的大整数,我完全理解这个警告的含义,以至于签名将开始变得重要。

我正在查看项目中的约400个警告,其中200个是关于符号转换的。我个人不想回去添加200个不同的演员阵容,因为它很难看并使代码更难阅读。

对于常见情况:表视图单元格索引,循环,数组计数小于1000等 - 我可以抑制此类警告并且可以吗?我是否可能偶然发现一些模糊的符号转换一个典型的&#34;非科学,非数学的iOS项目中的错误?

1 个答案:

答案 0 :(得分:4)

更好的答案是使用正确的数据类型。处理集合计数和索引时,请勿使用int。看看文档。请注意NSArray countNSUIntegerNSArray indexOfObject:也是NSUInteger

简单的解决方案是将int变量更改为匹配类型NSUInteger

这样做可以避免各种可能的问题和警告,并使您的代码更正确。

for (NSUInteger i = 0; i < names.count ; i++)
{
    [self.images addObject:[NSNull null]];
}

for (NSString* name in names)
{
    NSUInteger index = [names indexOfObject:name];
}