为什么在测试NSNull之前转换为对象?

时间:2013-07-24 08:40:53

标签: ios objective-c nsstring nsnull

我在上一个开发人员离开之后被移动到的项目中有以下块

NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
    return @"none"

string是从字典返回的NSString *

虽然我认为需要检查NSNull,但是有人能告诉我为什么要先向NSObject投射吗?

3 个答案:

答案 0 :(得分:3)

投射是不必要的,尽管通常最好将对象保持为id,直到您知道它不是NSNull(例如,如果您只是将其从集合中拉出来)。如果您的NSString*可能实际上是NSNull,则可能会造成混淆。也许原作者想说清楚字符串实际上可能是别的什么?

此外,NSNull被记录为单身,因此您可以(如果需要)使用==进行比较。

答案 1 :(得分:0)

实际上,在您的情况下,您无需键入强制转换字符串(如果它是NSString类的对象)到NSObject。无论如何,NSObject是Objective-C中的根类,因此它可以是所有类型的对象。 NSString类也继承自NSObject。所以NSObject *object = (NSObject *)string也有效。

if([string isEqual:[NSNull null]])
    return @"none"

也适合你。

最佳做法是将对象设置为 id 泛型类型,而不是NSObject

答案 2 :(得分:0)

正如@ mike-weller所说,最好的方法是:

 if(string == [NSNull null]){
     return @"none"
 }

'因为NSNull使用Singleton模式。