给出以下代码:
int firstInt, secondInt;
firstInt = 5;
secondInt = 5;
NSNumber *firstNumber = [NSNumber numberWithInt:firstInt];
NSNumber *secondNumber = [NSNumber numberWithInt:secondInt];
为什么在地球上这两个NSNumber实例指向同一个地址?
这让我发疯了!
当然,如果你将secondInt更改为'4',则所有内容都按预期工作。
谢谢, 的Jérémy
答案 0 :(得分:12)
这可能是编译器优化或实现细节:因为NSNumber是不可变的,所以不需要它们是单独的实例。
编辑:可能是一个实现优化思考它。当随后使用相同的整数调用时,numberWithInt会返回一个单例。
答案 1 :(得分:6)
答案 2 :(得分:3)
因为它们具有相同的hash
值,所以NSNumber
会向您返回第一次分配的缓存指针。