2014-10-31 51 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