2013-07-24 37 views
0

我有我一直移动到一前一后开发商已经离开为什么在测试NSNull之前将对象转换为对象?

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

哪里string是从字典返回的NSString *一个项目中的以下块。

虽然我承认NSNull需要检查,有人可以告诉我为什么先投向NSObject?

+0

你为什么认为你需要施放?你没有尝试过吗? –

+1

我不认为我需要,我问是否有理由有人认为它确实需要铸造 – James

+1

我在NSNull的类中看到这个@interface NSNull:NSObject 所以我不认为你在检查之前得注意,因为NSNull也是NSObject,但反之亦然。 – satheeshwaran

回答

3

演员阵容是不必要的,虽然通常最好将对象保留为id,直到您知道它不是NSNull(例如,如果您刚刚将其从集合中拉出)。如果你有一个NSString*其实可能是NSNull它可能会令人困惑。也许最初的作者想说清楚,字符串实际上可能是其他的东西?

此外,NSNull记录为单身人士,所以你可以(如果你想)使用==进行比较。

+1

使用==比较Objective-C中的字符串是否可行?它可能会导致违规的结果。你不这么认为吗?通常==用于数字比较。 –

+0

但是,如果你正在比较'[NSNull null]'(单身人士)它将是安全的。 –

+0

如果字符串不为空,则对['NSNull null]'的==将为false。 –

0

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

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

也适合你。

最佳做法保持您的对象在id泛型类型而不是NSObject

0

正如@麦克 - 韦勒说,最好的办法是:

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

“原因NSNull使用Singleton模式。