为什么==为具有相同值的NSNumber返回true?

时间:2014-03-20 17:52:34

标签: objective-c nsnumber

我通常使用isEqualToNumber:来检查NSNumbers的相等性。以下不应该有效,但确实如此?

NSNumber *number1 = @5;
NSNumber *number2 = [NSNumber numberWithLong:5];

if (number1 == number2)
{
    NSLog(@"Equal");
}

应检查指针地址而不是实际值。编译器中有什么变化吗?

我正在使用Xcode 5.1

1 个答案:

答案 0 :(得分:4)

因为它们是同一个对象。小NSNumbers的实例通过它们的实现进行缓存,现在Objective-C实际上在一定范围内对NSNumbers使用标记。

同样,[@"someString" copy]只会返回@"someString"。只要语义保持正确,框架就可以随意做各种各样的事情。