我通常使用isEqualToNumber:
来检查NSNumbers的相等性。以下不应该有效,但确实如此?
NSNumber *number1 = @5;
NSNumber *number2 = [NSNumber numberWithLong:5];
if (number1 == number2)
{
NSLog(@"Equal");
}
应检查指针地址而不是实际值。编译器中有什么变化吗?
我正在使用Xcode 5.1
答案 0 :(得分:4)
因为它们是同一个对象。小NSNumbers的实例通过它们的实现进行缓存,现在Objective-C实际上在一定范围内对NSNumbers使用标记。
同样,[@"someString" copy]
只会返回@"someString"
。只要语义保持正确,框架就可以随意做各种各样的事情。