美文网首页手机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 生成了这个表格并以截图的形式放在这里,然而它并不清楚。如果你知道如何在简书的文章中添加表格,麻烦留言告诉我,谢谢:)

共勉。:)

相关文章

  • NULL、nil、Nil 和NSNULL

    转:nil、Nil、NULL和NSNull区别NULL、nil、Nil这三者对于Objective-C中值是一样的...

  • IOS 处理空字符串

    一、区别: nil、Nil、NULL和[NSNull null]的区别 1.nil 当一个对象置为nil时,这个对...

  • Objective-C nil / Nil / NULL / N

    Objective-C nil / Nil / NULL / NSNull 和 BOOL / bool / Boo...

  • iOS nil、NULL、Nil 、NSNull的区别

    nil、Nil、NULL、NSNull的区别 nil:指向一个对象的空指针 Nil:指向一个类的空指针 NULL:...

  • nil、Nil、NULL、NSNULL

    nil、Nil、NULL、NSNull的区别 nil:是对objective c id 对象赋空值Nil:表示对类...

  • nil Nil NULL NSNull

    nil Nil NULL NSNull NULL是宏,是对于C语言指针使用的,表示空指针 nil是宏,是对于...

  • ios中的空值

    nil、Nil、NULL、NSNull的区别nil:指向一个对象的空指针Nil:指向一个类的空指针NULL:指向其...

  • nil、Nil、NSNull、NULL

    nil 表示空对象,每一个对象的引用计数为0时,系统会将这块内存释放掉,这时这个对象就为nil对于这种空对象所有r...

  • nil Nil NULL NSNull

    nil:指向oc中对象的空指针(对象),nil是一个指向不存在对象的指针 Nil:指向oc中类的空指针 NULL:...

  • nil/Nil/NULL/NSNull

    NULL 表示C指针为空 nil 表示指向Objective-C中对象的指针为空 Nil 表示Objective-...

网友评论

  • 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