3

我实际上正在调试我的 iOS 应用程序:我想测试一个变量是否为空:

愚蠢的问题哈!

if (var !=nil) { doSomeWork ; }

因此,如果变量 var 等于 nil,并且我们想在调试器区域打印这个结果,我们将得到类似的结果:

2012-10-12 21:33:01.553 应用程序名称 [892:13d03](空)

这很酷,但实际上当我尝试在调试器区域中打印变量内容时,它一直显示:

2012-10-12 21:33:01.553 应用程序名称 [892:13d03] < null >

你能告诉我这两种null有什么区别吗,我如何测试第二种是否等于nil。

提前致谢

4

2 回答 2

6

第二个输出<null>来自NSNull单例。这是一个被调用的类NSNull,它有一个类方法,每次都+null返回相同的单例实例。此类的主要目的是能够在您无法放置的地方NSNull充当替身,例如在集合中。例如,JSON 库通常在 JSON 包含.nilnilNSNullnull

您可以简单地通过询问它是否==[NSNull null](因为它是单例)或是否可能来测试这一点[obj isKindOfClass:[NSNull null]][obj isEqual:[NSNull null]]如果你喜欢,你可以使用。您甚至可以询问是否== kCFNull愿意,因为CFNull并且NSNull是免费桥接的。你想要什么风格,就看你自己了。

于 2012-10-12T19:55:07.887 回答
0

NSNull它是类,nil不是。因此,如果您要nil与某些东西进行比较,则应使用“ ==”,如果NSNull则->if ([var isEqual:[NSNull null]]) { ....}

于 2012-10-12T19:55:28.790 回答