Objective c 在nil NSNumber上使用compare是否总是返回OrderedName?

Objective c 在nil NSNumber上使用compare是否总是返回OrderedName?,objective-c,compare,nsnumber,Objective C,Compare,Nsnumber,鉴于上述代码段,其中badNum实际上是nil,如果语句保证永远不会被输入, NSNumber *badNum = 0; NSNumber *goodNum = @42; if ([badNum compare:goodNum] == NSOrderedAscending) // ... 本质上,我想知道是否每次使用-[NSNumber compare::时都必须进行nil检查,因此另一个问题是我是否需要使用以下代码来确保比较始终按其显示方式工作? NSNumber *badNum =

鉴于上述代码段,其中
badNum
实际上是
nil
如果
语句保证永远不会被输入,

NSNumber *badNum = 0;
NSNumber *goodNum = @42;
if ([badNum compare:goodNum] == NSOrderedAscending)
    // ...
本质上,我想知道是否每次使用
-[NSNumber compare::
时都必须进行
nil
检查,因此另一个问题是我是否需要使用以下代码来确保比较始终按其显示方式工作?

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

是的,只要苹果不更改当前定义为零的NSOrderedName,就可以保证:

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

当向
nil
发送
compare:
消息时,您似乎会获得
SensorDeredName
的原因是,当目标为
nil
时,Objective-C为返回类型提供默认值。由于
sensorderedsame
0
,是默认值,因此当
badNum
nil
时,您保证会得到它,所以我必须始终执行
nil
检查?男人…:/你需要的逻辑取决于你自己。根据您希望如何处理
nil
值,您可能需要也可能不需要检查这些值是否为
nil
值。@rmaddy可以在发送消息时提供示例
比较:
nil
NSNumber*
比较是否有益?如果您对数字进行排序,您希望
nil
值出现在排序的开始、结尾,还是完全忽略?您对该问题的回答会影响需要编写
if
语句的方式。这取决于您和应用程序的需要。相关: