2011-12-20 13 views
2

NSNumberが0に等しい場合はNSMutableArrayになります。これはnilと解釈され、カウント方法に問題がありますか?可変配列のNSNumber = 0

+0

あなたはこれを解消しましたか?私は以下の答えが正しいことを知っています。しかし、あなた自身の目でこれを見たなら、NSNumberを格納してその値を保持するNSArrayを作成すると、実行時に配列が半分になることは信じられません。これが事実であるとは想像もしませんが、それは正確にランタイムがしたものです。 – cynistersix

+0

以下の回答が正しいです。 IDEがうんざりして、監視された値を更新しませんでした。 – cynistersix

答えて

2

いいえ、オブジェクトID自体と内容を区別する必要があります。 NSNumberの内容は0になることもありますが、前記オブジェクトのidは実際には実際のアドレスです。

例えば、オブジェクトID 0x2222がメモリ内にこのように(非常に単純化された)に見えることがあります。

  +--------+ 
0x2222 --> | 0x0000 | 
      +--------+ 

あなたは、オブジェクトIDがないゼロが、実際の値で見ることができます。オブジェクトの内容はゼロですが、オブジェクトIDには関係ありません。

可変配列に入るものは、オブジェクトのid値です。オブジェクトの内容ではありません。

5

これは、配列のカウントをインクリメントします。
[NSNumber numberWithInt:0]
はオブジェクトであり、ゼロではありません。

さらに、あなたは、配列

[mutableArray addObject:anObject]; 

にnilを追加することはできませんanObjectがゼロである場合NSInvalidArgumentExceptionを発生させます。

1
NSMutableArray *a = [NSMutableArray array]; 
[a addObject:[NSNumber numberWithInt:0]]; 
NSLog(@"count: %d", a.count);