objective-c - (null) 与 <null> 有什么区别?

标签 objective-c crash nsstring null

在我将其缩小到特定方法之前,我的应用程序中出现了随机崩溃。在那种方法中,我期望 NSString作为参数。这个NSString有时可以为零,在这种情况下方法结束并且没有造成任何伤害。

当我通过 NSLog(@"%@", myString) 运行我的方法的参数时我发现我得到了其中之一:

  • 实际 NSString 的内容
  • (空)

  • 前两个是我的方法所期望和处理的。第三个,,用 -[NSNull length]: unrecognized selector sent to instance 0x1b2ace8 使我的应用程序崩溃。 .

    我通过检查 nil 找到了解决问题的方法。或 isKindOfClass ,但我的问题是 (null) 和 有什么区别? .

    最佳答案

    (null)NSLog() 的字符串使用格式说明符 %@ 时打印与 nil值(value)。 <null>是发送 description 的结果到NSNull单例(通过 [NSNull null] 访问)。
    NSNull在 Cocoa 集合( NSArrayNSDictionary )中用作“无对象”占位符,因为它们不能包含 nil .

    这两个描述字符串令人困惑地相似,有人可能会争辩说 NSNull应该有一个针对它的错误,以便更清楚地说明这一点。

    关于objective-c - (null) 与 <null> 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287590/

    相关文章:

    ios - 应用程序中带有 TabBarController 的导航 Controller

    ios - 如何将 AVPlayerLooper 与 AVPlayerItemVideoOutput 一起使用?

    iphone - 代码行之间的数据没有执行

    objective-c - 从 NSString 中删除标记字符

    iphone - 每行的 UILabel 文本

    objective-c - UIButton 阴影在所有 4 个面

    windows - 快速调用函数崩溃

    Android - 将 Line SDK 嵌入框架时崩溃

    ios - fatal error : unexpectedly found nil , 我定义了一个手势,这个方法是手势绑定(bind)的方法

    ios - 自定义注释的属性在委托(delegate)方法中不可见