0

我创建了 2 个对象:

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

并在分配后放置一个断点,但令人难以置信的是,我看到两个对象的地址相同:

在此处输入图像描述

并且 [index1 isEqual: index2] 总是返回 TRUE ??? 为什么?

4

2 回答 2

4

这是一个内部优化。NSNumber 是不可变的,因此,为了节省空间,如果您要求 NSNumber 表示 0(和其他一些小常量),您总是会返回相同的对象。

于 2012-07-12T15:17:00.873 回答
3

这是一种优化。NSNumber 是不可变的,一个与另一个具有相同 int 值的 NSNumber 将始终与另一个相同,因此将它们作为两个独立的对象是没有意义的。这使得比较两个 NSNumber 变得微不足道,因为您可以使用地址来检查等价性,而不是比较内部值。

于 2012-07-12T15:16:44.437 回答