iOS nil,NSNull,NULL,Nil

探索一下,往后台传值的过程中,遇到的一些问题: 后台交互的时候,传了一个字典,字典中有可能包含空值

先来看下现象:

        //情况1,直接为nil
        NSString *name = nil;
        
        NSDictionary *dic = @{@"givenName":@"W",@"firstName":@"D",@"allName":name,@"gender":@(55)};
        NSLog(@"%@",dic);

        //此时,直接报错:
        *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
        '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'


      //情况2,传NSNull的实例变量
        NSString *name = [NSNull null];
        
        NSDictionary *dic = @{@"givenName":@"W",@"firstName":@"D",@"allName":name,@"age":@(55)};
        NSLog(@"%@",dic);

        //打印结果如下:
        Printing description of dic:
        {
            allName = "<null>";
            firstName = D;
            age = 55;
            givenName = W;
        }

所以,看得出来,iOS里的空值还是有区别的,要好好区别,不然可能是会引起崩溃的!

这里来了解一下他们的概念:


NSNull 在 Foundation 和其它框架中被广泛的使用,以解决如 NSArrayNSDictionary 之类的集合不能有 nil 值的缺陷。你可以将 NSNull 理解为有效的将 NULL 或者 nil 值封装boxing,以达到在集合中使用它们的目的。
由此可见:NSString中是可以添加为空对象的,即(nil)
NSArray, NSDictionary则不行,为了防止崩溃,则使用NSNull来代替

https://nshipster.cn/nil/
https://www.jianshu.com/p/6abd21fde286

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容