Objective-C中NSNumber的不同值

时间:2015-02-15 14:25:51

标签: objective-c long-integer nsnumber

我有一个变量,它是一个类型为long的NSNumber。它应该保持值-1。 当我将其记录到控制台时,它会显示预期值-1。

NSLog(@"myVariable %@", self.myVariable);

但if子句中的以下表达式为false。

    if (myVariable == [NSNumber numberWithInt:-1]) {
    ...
    }

调试器显示值72057594037927935。有人知道它有什么问题吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

NSNumber与其他对象进行比较时,您有两个选项可以执行不同的操作:

  • 您可以使用==检查两个对象是否代表完全相同的对象实例,或
  • 您可以使用isEqual:方法检查两个对象是否代表相同的

在您的情况下,最安全的方法是使用第二种替代方法

if ([myVariable isEqual:[NSNumber numberWithLong:-1]]) {
    ...
}

==方法可能有效,也可能无效,具体取决于您生成myVariable的方式。

答案 1 :(得分:1)

NSObject有一个方法:(NSString *)描述 当您将对象放在NSLog方法上时,此方法将定义打印出来的内容。

  • NSNumber继承了NSObject,并且描述方法以打印原始值的方式实现,这就是您使用NSLog(@"myVariable %@", self.myVariable);

  • 看到期望值的原因
  • 运营商" =="将比较这种情况下的2个对象(比较指针和值)==>在你的情况下,它将返回false

  • 如果要比较2个NSNumbers的原始值,请使用以下方法(BOOL)isEqualToNumber:(NSNumber *)number;