if和else语句都是随机调用的

gal*_*leo -2 objective-c nsnumber

我有一个解析HTML的方法.在那里有一个if/else语句:

if ((NSNumber1 == NSNumber2)) {
    NSLog(@"dafuq1?");
} else {
    NSLog(@"dafuq2?");
}
Run Code Online (Sandbox Code Playgroud)

日志有时像这样:

...:dafuq1?

...:dafuq2?

所以两个部分都被调用了.但有时候只有其中一个被召唤!为什么?

顺便说一句.iOS 7.0.4,Xcode 5.0.1

并且 (NSNumber1 == NSNumber2)是真实的

rma*_*ddy 6

这些是对象.你不能==用来比较平等.使用isEqualToNumber:.

if ([NSNumber1 isEqualToNumber:NSNumber2])
Run Code Online (Sandbox Code Playgroud)

  • @BlackRider同样,比较`NSNumber`实例的指针相等性是创建令人困惑的错误的可靠方法.在某些平台上,-2到11之间的数字是共享实例.在其他平台上,标记指针意味着-2 ^ 55..2 ^ 55(或^ 56?)将是有效共享实例(尽管它们实际上根本没有分配支持). (3认同)