nil / Nil / NULL / NSNull

NSNull 風(fēng)波

最近我開發(fā)的 iOS APP 通過友盟發(fā)現(xiàn)了一個(gè)新的崩潰,日志如下:

NSNull 到底是個(gè)什么東西?我從來沒有調(diào)用過這個(gè)類,那么它又是哪產(chǎn)生的?

通過 search 和排查,我最終定位了這個(gè)問題,這個(gè) NSNull 是由 AFNetworking 的一個(gè)函數(shù)回調(diào)產(chǎn)生的:?

我在取 responseObject 的某個(gè) value 時(shí),得到了一個(gè) NSNull 對象,而這個(gè)對象本應(yīng)該是一個(gè) NSString 的。

通過與 PHP 服務(wù)器同學(xué)聯(lián)調(diào),我們最終發(fā)現(xiàn)了這個(gè)問題產(chǎn)生的原因。

原來,服務(wù)器同學(xué)在獲取某個(gè)字段的時(shí)候,不小心填錯(cuò)了參數(shù),導(dǎo)致獲取到的字段為空。他將這個(gè)空作為這個(gè) Key 的 Value 填入了 JSON。

iOS APP 這邊,AFNetworking 發(fā)現(xiàn)了這個(gè)空,它跟 Objective-C 中的 nil 有著顯著的區(qū)別,因?yàn)?Objective-C 中的 NSDictionary 是不允許某一個(gè) Key 對應(yīng)的 Value 為 nil的。 這個(gè)空,最終被轉(zhuǎn)化成了一個(gè) NSNull 對象。

那么 NSNull 究竟是什么?

NSNull: 有作沒有

NSNull 在 Foundation 框架中被廣泛使用,以解決 NSArray 和 NSDictionay 之類的集合不能有 nil 值的缺陷。我們可以將 NSNull 理解為 nil 在集合中的封裝,以達(dá)到在集合中表示“空”的目的:

NSMutableDictionary* mutableDictionary = [NSMutableDictionarydictionary];

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

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

nil / Nil / NULL / NSNull

Objective-C 中有四種不同的空值,以下是這四種空值表達(dá)式的值和含義:

*PS: 我沒有找到簡書的表格功能,所以我用 MacDown 生成了這個(gè)表格并以截圖的形式放在這里,然而它并不清楚。如果你知道如何在簡書的文章中添加表格,麻煩留言告訴我,謝謝:)

共勉。:)

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

相關(guān)閱讀更多精彩內(nèi)容

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