NSNumber *badNum = 0;
NSNumber *goodNum = @42;
if ([badNum compare:goodNum] == NSOrderedAscending)
// ...
鉴于以上代码段,badNum
实际上是nil
,是保证永不输入的if
语句?
基本上,我想知道每次使用nil
时是否必须进行-[NSNumber compare:]
检查,所以另一个问题是我是否需要使用以下代码来确保始终比较是否有效?
if (badNum && goodNum && [badNum compare:goodNum] == NSOrderedAscending)
// ...
答案 0 :(得分:2)
是的,只要Apple没有更改NSOrderedSame
,目前定义为零,就可以保证:
enum {
NSOrderedAscending = -1,
NSOrderedSame, // == 0
NSOrderedDescending // == 1
};
在向NSOrderedSame
发送compare:
消息时,您似乎获得nil
的原因是,当目标为nil
时,Objective-C会为返回类型提供默认值。由于NSOrderedSame
是默认值0
,因此当badNum
为nil
时,您可以保证获得此值。