0

iOS 7 スプライト キットでは

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

この簡単な例では、この警告が生成されます

暗黙的な変換により整数の精度が失われます: 'NSUInteger' (別名 'unsigned long') から 'int' へ

標準アプリ プロジェクトでは、まったく同じコードでこの警告は生成されません。

それは大きな問題ではなく、これで回避できます

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

理由を知りたいだけです。

ありがとう

4

1 に答える 1

0

符号なし型を整数型にキャストすると、問題が発生する可能性があります。具体的には、unsigned 型の値がINT_MAX / 2整数値より大きい場合、負の値になります。

通常、この警告を有効にし、そのような警告を修正することをお勧めします。たとえば、これは逆が問題となる 1 つのケースです。

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

問題に気づきましたか?

経験則: 常に整数の符号を気にし、符号付き/符号なしの不一致の警告を決して無視しないでください。

警告がスプライト キットにのみ表示されるのは、それぞれ更新されたプロジェクト テンプレートに関係している可能性があります。

于 2013-09-26T19:58:47.870 に答える