美文网首页手机APPoc带我飞3
nil / Nil / NULL / NSNull

nil / Nil / NULL / NSNull

作者: 公爵海恩庭斯 | 来源:发表于2015-11-13 16:50 被阅读335次

    NSNull 风波

    最近我开发的 iOS APP 通过友盟发现了一个新的崩溃,日志如下:

    NSNull 到底是个什么东西?我从来没有调用过这个类,那么它又是哪产生的?

    通过 search 和排查,我最终定位了这个问题,这个 NSNull 是由 AFNetworking 的一个函数回调产生的: 

    我在取 responseObject 的某个 value 时,得到了一个 NSNull 对象,而这个对象本应该是一个 NSString 的。

    通过与 PHP 服务器同学联调,我们最终发现了这个问题产生的原因。

    原来,服务器同学在获取某个字段的时候,不小心填错了参数,导致获取到的字段为空。他将这个空作为这个 Key 的 Value 填入了 JSON。

    iOS APP 这边,AFNetworking 发现了这个空,它跟 Objective-C 中的 nil 有着显著的区别,因为 Objective-C 中的 NSDictionary 是不允许某一个 Key 对应的 Value 为 nil的。 这个空,最终被转化成了一个 NSNull 对象。

    那么 NSNull 究竟是什么?

    NSNull: 有作没有

    NSNull 在 Foundation 框架中被广泛使用,以解决 NSArray 和 NSDictionay 之类的集合不能有 nil 值的缺陷。我们可以将 NSNull 理解为 nil 在集合中的封装,以达到在集合中表示“空”的目的:

    NSMutableDictionary* mutableDictionary = [NSMutableDictionarydictionary];

    mutableDictionary[@"someKey"] = [NSNullnull];

    NSLog(@"Keys: %@",[mutableDictionaryallKeys]);// @[@"someKey"]

    nil / Nil / NULL / NSNull

    Objective-C 中有四种不同的空值,以下是这四种空值表达式的值和含义:

    *PS: 我没有找到简书的表格功能,所以我用 MacDown 生成了这个表格并以截图的形式放在这里,然而它并不清楚。如果你知道如何在简书的文章中添加表格,麻烦留言告诉我,谢谢:)

    共勉。:)

    相关文章

      网友评论

      • LostAbaddon:你可以使用markdown模式的编辑器,然后表格的语法为:

        |标识|值|含义|
        |-|-|-|
        |Null|(void*)0|C指针的字面零值|
        |nil|(id)0|ObjC对象的字面零值|
        |Nil|(Class)0|ObjC类的字面零值|
        |NSNull|[NSNull null]|用来表示零值的单独对象|
        公爵海恩庭斯:@塔塔酱 我知道 Markdown 语法,我也会写,但是我不知道如何切换文章编辑模式。
        LostAbaddon:@公爵海恩庭斯 这是Markdown的语法呀,在Markdown编辑器里直接写就可以了。
        公爵海恩庭斯:@塔塔酱 谢谢啊,如何开启这个模式?

      本文标题:nil / Nil / NULL / NSNull

      本文链接:https://www.haomeiwen.com/subject/fvxkhttx.html