当值等于时,为什么NSNumber指向相同的地址?

时间:2010-11-24 18:12:10

标签: objective-c pointers ios nsnumber

给出以下代码:

int firstInt, secondInt;

firstInt = 5;
secondInt = 5;

NSNumber *firstNumber = [NSNumber numberWithInt:firstInt];
NSNumber *secondNumber = [NSNumber numberWithInt:secondInt];

为什么在地球上这两个NSNumber实例指向同一个地址?

这让我发疯了!

当然,如果你将secondInt更改为'4',则所有内容都按预期工作。

谢谢, 的Jérémy

3 个答案:

答案 0 :(得分:12)

这可能是编译器优化或实现细节:因为NSNumber是不可变的,所以不需要它们是单独的实例。

编辑:可能是一个实现优化思考它。当随后使用相同的整数调用时,numberWithInt会返回一个单例。

答案 1 :(得分:6)

答案 2 :(得分:3)

因为它们具有相同的hash值,所以NSNumber会向您返回第一次分配的缓存指针。