iOS nil,NSNull,NULL,Nil

探索一下,往后臺(tái)傳值的過(guò)程中,遇到的一些問(wèn)題: 后臺(tái)交互的時(shí)候,傳了一個(gè)字典,字典中有可能包含空值

先來(lái)看下現(xiàn)象:

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

        //此時(shí),直接報(bào)錯(cuò):
        *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
        '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'


      //情況2,傳NSNull的實(shí)例變量
        NSString *name = [NSNull null];
        
        NSDictionary *dic = @{@"givenName":@"W",@"firstName":@"D",@"allName":name,@"age":@(55)};
        NSLog(@"%@",dic);

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

所以,看得出來(lái),iOS里的空值還是有區(qū)別的,要好好區(qū)別,不然可能是會(huì)引起崩潰的!

這里來(lái)了解一下他們的概念:


NSNull 在 Foundation 和其它框架中被廣泛的使用,以解決如 NSArrayNSDictionary 之類的集合不能有 nil 值的缺陷。你可以將 NSNull 理解為有效的將 NULL 或者 nil 值封裝boxing,以達(dá)到在集合中使用它們的目的。
由此可見(jiàn):NSString中是可以添加為空對(duì)象的,即(nil)
NSArray, NSDictionary則不行,為了防止崩潰,則使用NSNull來(lái)代替

https://nshipster.cn/nil/
http://m.itdecent.cn/p/6abd21fde286

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容