在nil NSNumber上使用compare总是返回NSOrderedSame吗?

时间:2015-09-16 15:22:05

标签: objective-c compare nsnumber

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

鉴于以上代码段,badNum实际上是nil是保证永不输入的if语句?

基本上,我想知道每次使用nil时是否必须进行-[NSNumber compare:]检查,所以另一个问题是我是否需要使用以下代码来确保始终比较是否有效?

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

1 个答案:

答案 0 :(得分:2)

是的,只要Apple没有更改NSOrderedSame,目前定义为零,就可以保证:

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

在向NSOrderedSame发送compare:消息时,您似乎获得nil的原因是,当目标为nil时,Objective-C会为返回类型提供默认值。由于NSOrderedSame是默认值0,因此当badNumnil时,您可以保证获得此值。