objective-c分配的两个对象有相同的内存吗?

时间:2012-07-12 15:10:24

标签: objective-c cocoa-touch

我创建了两个对象:

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

并在分配后添加一个breackpoint,但不可思议地看到两个对象的地址相同:

enter image description here

和[index1 isEqual:index2]总是返回TRUE ???为什么呢?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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