是kCFNull和[NSNull null]可互换

时间:2011-10-22 00:59:39

标签: iphone ios null

好像是

if(myObj == (typeOfMyObj *) kCFNull){
 //myObj is null
}

if(myObj == (typeOfMyObj *) [NSNull null]){
 //myObj is null
}

产生相同的结果。

总是这样吗?我正在开发一个iOS 5应用程序。

谢谢!

2 个答案:

答案 0 :(得分:5)

Apple的文档似乎没有说明NSNullCFNullRef是免费桥接的,但它们似乎是自从CFNullRef引入Mac OS以来X 10.2。从Mac OS X 10.0开始,NSNull可用。最后,它们实际上只是用作区分NULL对象的标记值。

您的代码可能有一种方法可以避免依赖kCFNull == [NSNull null],但如果您出于某种原因不能这样做,那么我不会太担心它。

答案 1 :(得分:-2)

我同意杰里米,

如果您想100%安全,最好的办法是使用isKindOfClass检查课程:

即:

[object isKindOfClass:[NSNull class]]

[object isEqual:[NSNull null]]

然后你可以安全地应对未来的任何变化,虽然它是超级乏味的,也是所有提议方法中最慢的:P

有一天这不是不可能的

[[NSNull null] isEqual:(id)kCFNull] == YES

([NSNull null] == kCFNull) == NO

甚至

([NSNull null] == [NSNull null]) == NO

虽然这些问题导致大多数Obj-C开发人员花费更多时间跳过篮球而不是编写代码:P