【问题标题】:NSNumber comparision iOS SDK 4.2 vs 5, in Objective-C?NSNumber 比较 iOS SDK 4.2 与 5,在 Objective-C 中?
【发布时间】:2011-11-17 03:34:06
【问题描述】:

我在我的应用程序中发现了一个错误:逻辑是我使用“==”比较两个NSNumbers,我相信它曾经有效。但它不再通过 iOS sdk 5,所以我需要改用isEqualToNumber

iOS sdk 4.2 的任何人都可以尝试运行以下代码并给我结果。我尝试恢复到较旧的 Xcode 来自己测试它,但我无法做到。

NSNumber *num1 = [NSNumber numberWithInt:100];
NSNumber *num2 = [NSNumber numberWithInt:100];

if (num1 == num2)
{
    NSLog(@"== YES");
}
else
{
    NSLog(@"== NO");
}

【问题讨论】:

  • 不是重复的,我不是要答案我知道答案是equalsToNumber。我问是否有人可以告诉我 iOS 4.2 上的结果是什么
  • “我相信它曾经可以工作”:根据上面链接的问题,从 0 到 12 的数字得到相同的 NSNumber 实例单例。但你不应该依赖它。
  • 这没有帮助,就像我在问题中提到的那样,我需要知道 iOS 4.2 上的行为是什么。我不知道我怎么能更清楚。我使用的 NSNumbers 是数据库中的自动递增数字,大多为 6-7 位,所以链接的问题没有回答我的问题
  • 问题是,如果这种行为在 4.2 中起作用是完全无关紧要的。这不是应该依赖的东西。您在 4.2 下有一个在 5.0 中暴露的错误

标签: objective-c nsnumber


【解决方案1】:

isEqualToNumber 是这里的正确解决方案。它曾经工作的事实纯粹是系统内部如何缓存数字的实现细节。你永远不应该(阅读可能不是你真正想做的事)使用== 比较对象。对象上的== 将比较它们的内存地址,而不是它们实际上是否相等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多