在 nil NSNumber 上使用比较是否总是 return NSOrderedSame?

Does using compare on a nil NSNumber always return NSOrderedSame?

NSNumber *badNum = 0;
NSNumber *goodNum = @42;
if ([badNum compare:goodNum] == NSOrderedAscending)
    // ...

鉴于上面的代码片段,其中 badNum 实际上是 nil 是否保证永远不会输入 if 语句?

本质上,我想知道我是否必须在每次使用 -[NSNumber compare:] 时都进行 nil 检查,所以另一个问题是 我是否需要使用以下代码来确保比较总是像它出现的那样工作?

if (badNum && goodNum && [badNum compare:goodNum] == NSOrderedAscending)
    // ...

是的,可以保证,只要苹果不改NSOrderedSame,目前定义为零:

enum {
   NSOrderedAscending     = -1,
   NSOrderedSame,      // == 0
   NSOrderedDescending // == 1
};

nil 发送 compare: 消息时出现 NSOrderedSame 的原因是 Objective-C 为 return 类型提供默认值目标是 nil。由于NSOrderedSame0,默认值,当badNumnil时,你保证得到它。