我有一个遗留项目,在iOS 5,6和7中运行良好。不确定是哪个 Xcode 启动的,但我看到很多"不同符号 int 和 NSUInteger 的整数比较(又名无符号 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 等 - 我可以抑制此类警告并且没问题吗?我可能会在一个"典型"、非科学、非数学繁重的 iOS 项目中偶然发现一些晦涩难懂的符号转换错误吗?
更好的答案是使用正确的数据类型。使用集合计数和索引时不要使用 int
。查看文档。看到NSArray count
是一个NSUInteger
。 NSArray 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];
}