【问题标题】:Kind of null variable IOS空变量IOS的种类
【发布时间】:2012-10-13 03:56:13
【问题描述】:

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

愚蠢的问题哈!

if (var !=nil) { doSomeWork ; }

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

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

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

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

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

提前致谢

【问题讨论】:

    标签: ios debugging null


    【解决方案1】:

    第二个输出 <null> 来自 NSNull 单例。这是一个名为NSNull 的类,它有一个类方法+null,每次都返回相同的NSNull 单例实例。此类的主要目的是能够在您无法放置nil 的地方(例如在集合中)充当nil 的替代品。例如,当 JSON 包含 null 时,JSON 库通常会返回 NSNull

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

    【讨论】:

    • “因为 CFNull 和 NSNull 是免费桥接的”,没有记录
    • @user102008:嗯,你说得对。但这很容易验证。如果您评估[kCFNull class],您将返回NSNull。此外,kCFNull == [NSNull null] 为真(因为它是单例)。
    【解决方案2】:

    NSNull 是类,nil 不是。因此,如果您将nil 与您应该使用“==”进行比较,如果NSNull then -> if ([var isEqual:[NSNull null]]) { ....}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 2011-09-10
      • 2016-03-01
      • 1970-01-01
      • 2017-09-15
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多