2014-10-31 40 views
0

我有一个遗留项目,在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等 - 我可以抑制这样的警告,并没关系吗?我可能会在“典型”,非科学,非数学重要的iOS项目中遇到一些模糊的符号转换错误吗?

回答

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]; 
} 
+0

这是一个简单的状态解决方案,但是如果您使用数百万行代码,这不是一个简单的解决方案来实现。 – 2014-10-31 18:22:41

+2

@IanMacDonald您的数百万行代码只有数百(最多)使用'int'来更改。对于大多数项目来说这不是一个大问题。 – rmaddy 2014-10-31 18:24:11

+0

找到并替换作品,特别是现在有一个预览按钮,显示差异。几乎没有什么理由使用int,因此不会将其全部删除。 – BooRanger 2014-10-31 18:29:48

相关问题