我有我一直移动到一前一后开发商已经离开为什么在测试NSNull之前将对象转换为对象?
NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
return @"none"
哪里string
是从字典返回的NSString *
一个项目中的以下块。
虽然我承认NSNull需要检查,有人可以告诉我为什么先投向NSObject?
我有我一直移动到一前一后开发商已经离开为什么在测试NSNull之前将对象转换为对象?
NSObject *object = (NSObject *)string;
if([object isEqual:[NSNull null]])
return @"none"
哪里string
是从字典返回的NSString *
一个项目中的以下块。
虽然我承认NSNull需要检查,有人可以告诉我为什么先投向NSObject?
演员阵容是不必要的,虽然通常最好将对象保留为id
,直到您知道它不是NSNull
(例如,如果您刚刚将其从集合中拉出)。如果你有一个NSString*
其实可能是NSNull
它可能会令人困惑。也许最初的作者想说清楚,字符串实际上可能是其他的东西?
此外,NSNull
记录为单身人士,所以你可以(如果你想)使用==
进行比较。
使用==比较Objective-C中的字符串是否可行?它可能会导致违规的结果。你不这么认为吗?通常==用于数字比较。 –
但是,如果你正在比较'[NSNull null]'(单身人士)它将是安全的。 –
如果字符串不为空,则对['NSNull null]'的==将为false。 –
实际上在你的情况下,你不需要输入字符串(如果它是NSString
类的对象)到NSObject
。无论如何,NSObject
是Objective-C中的一个根类,因此它可以是所有类型的对象。 NSString
类也继承自NSObject
。所以NSObject *object = (NSObject *)string
也有效。
if([string isEqual:[NSNull null]])
return @"none"
也适合你。
最佳做法保持您的对象在id泛型类型而不是NSObject
。
正如@麦克 - 韦勒说,最好的办法是:
if(string == [NSNull null]){
return @"none"
}
“原因NSNull使用Singleton模式。
你为什么认为你需要施放?你没有尝试过吗? –
我不认为我需要,我问是否有理由有人认为它确实需要铸造 – James
我在NSNull的类中看到这个@interface NSNull:NSObject所以我不认为你在检查之前得注意,因为NSNull也是NSObject,但反之亦然。 –
satheeshwaran