6

理解できない問題がある

NSArray *emptyArr = @[];
for (int i=0; i < ([emptyArr count]-1) ; i++) {
    NSLog(@"Did run for1");
}

[emptyArr count]- 1 は -1 ですが、私のアプリはまだNSLogコマンドを実行しています!

int 変数を使用する場合:

NSArray *emptyArr = @[];
int count = [emptyArr count]-1;
for (int i=0; i < count ; i++) {
    NSLog(@"Did run for1");
}

NSLogその後、私のアプリはコマンドを実行しません。

誰でも私を助けてください!

4

3 に答える 3

6

これは、 の戻り値の型がcountunsigned intあるためです。0 から 1 を引いても -1 にはなりません。代わりに、可能な限り最高にアンダーフローしますunsigned int。2 番目のバージョンで機能する理由はint、値 -1 が有効な に (暗黙的に) キャストするためです。

于 2013-06-11T08:24:35.550 に答える
0

[emptyArr count] によって返される値は符号なし整数です。最初のケースでは、[emptyArr count]-1 は 2 の補数で表された 0-1 であり、膨大な数です。そのため、ログを何度も出力します。

2 番目のケースでは、[emptyArr count]-1 -> この結果を int にキャストしています。0-1 -> -1 符号付き整数。したがって、印刷されません。

于 2013-06-11T08:28:50.670 に答える