2013-09-26 29 views
0

在iOS系統7的Sprite套件精靈工具包唯一的警告爲陣列計數

NSMutableArray *temp = [[NSMutableArray alloc] init]; 
    int x = [temp count]; 
    NSLog(@"%02d", x); 

這個簡單的示例產生該警告

隱式轉換失去整數精度: 'NSUInteger'(又名 '無符號長' )到'int'

在標準應用程序項目中,完全相同的代碼不會產生此警告。

它不是一個大問題,我可以解決它,這個

NSMutableArray *temp = [[NSMutableArray alloc] init]; 
    NSUInteger x = [temp count]; 
    NSLog(@"%02lu", x); 

只是想知道爲什麼。

謝謝

回答

0

將無符號類型轉換爲整數類型時可能會出現問題。特別是如果無符號類型的值高於INT_MAX/2,整數值將變爲負值。

啓用此警告並解決任何此類警告通常是一個好主意。例如,這是一種情況,其中相反是有問題的:

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

注意到這個問題?

經驗法則:始終關心您的整數的符號性,永遠不會忽略符號/無符號的不匹配警告。

這個警告只出現在Sprite Kit中,可能只是與更新的分別做一個不同的項目模板。

+0

謝謝,所以我的工作實際上是正確做到這一點的唯一方法? – DogCoffee

+2

這不是一個解決方法,它只是正確的代碼。帶有警告的代碼示例仍然可以在99.9%的情況下工作,如果不是100%的情況,但是如果臨時包含非常多的項目(即,2億個),則會失敗。 – LearnCocos2D