0

2 つのオブジェクトを作成しました。

NSNumber * index1 = [[[NSNumber alloc] initWithInt:0 autorelease];
NSNumber * index2 = [[[NSNumber alloc] initWithInt:0 autorelease];

割り当ての後にブレークポイントを配置しますが、信じられないことに、2つのオブジェクトに同じアドレスが表示されます。

ここに画像の説明を入力

および [index1 isEqual: index2] は常に TRUE を返します ??? なぜ?

4

2 に答える 2

4

内部最適化です。NSNumbers は不変であるため、スペースを節約するために、0 (およびその他の小さな定数) の NSNumber 表現を要求すると、常に同じオブジェクトが返されます。

于 2012-07-12T15:17:00.873 に答える
3

最適化です。NSNumber は不変であり、他のものと同じ int 値を持つ NSNumber は常に他のものと同じであるため、それらを 2 つの別個のオブジェクトにする意味はありません。これにより、内部値を比較する代わりにアドレスを使用して同等性をチェックできるため、2 つの NSNumbers の比較が簡単になります。

于 2012-07-12T15:16:44.437 に答える