好像是
if(myObj == (typeOfMyObj *) kCFNull){
//myObj is null
}
和
if(myObj == (typeOfMyObj *) [NSNull null]){
//myObj is null
}
产生相同的结果。
总是这样吗?我正在开发一个iOS 5应用程序。
谢谢!
答案 0 :(得分:5)
Apple的文档似乎没有说明NSNull
和CFNullRef
是免费桥接的,但它们似乎是自从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