2013-09-26 4 views
0

В IOS 7 Sprite KitSprite Kit Только предупреждение для массива Count

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

Этот простой пример дает это предупреждение об

неявное преобразование теряет целочисленную точность: 'NSUInteger' (он же беззнаковое долго ") to '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, возможно, просто связано с обновленным, соответственно, другим шаблоном проекта.

+0

Спасибо, так что моя работа на самом деле является единственным способом сделать это правильно? – DogCoffee

+2

Это не обходной путь, это просто правильный код. Образец кода с предупреждением будет по-прежнему работать в 99,9%, если не в 100% случаев, но будет терпеть неудачу, если temp содержит действительно большое количество элементов (т. Е. 2+ миллиарда). – LearnCocos2D