我创建了两个对象:
NSNumber * index1 = [[[NSNumber alloc] initWithInt:0 autorelease];
NSNumber * index2 = [[[NSNumber alloc] initWithInt:0 autorelease];
并在分配后添加一个breackpoint,但不可思议地看到两个对象的地址相同:
和[index1 isEqual:index2]总是返回TRUE ???为什么呢?
答案 0 :(得分:4)
这是内部优化。 NSNumbers是不可变的,因此,为了节省空间,如果要求NSNumber表示为0(以及其他一些小常量),则总是会返回相同的对象。
答案 1 :(得分:3)
这是一项优化。 NSNumbers是不可变的,并且具有与另一个相同的int值的NSNumber将始终与另一个相同,因此将它们作为两个单独的对象是没有意义的。这使得比较两个NSNumbers变得微不足道,因为您可以使用地址来检查等价而不是比较内部值。