【概述】
以前,對于他們的區別都是死記硬背的,這次寫程序,遇了一個坑,后臺返回一個字典里的字段
zjjb = "<null>”
然后我這樣取:
[[dict objectforkey:@"zjjb”] length]
結果報錯:
CRASH: -[NSNull length]: unrecognized selector sent to instance
巨坑!后來找到了解決辦法,就準備來總結下他們幾個之間的差別
【差別總結】
概念
- nil:指向一個對象的空指針
- Nil:指向一個類的空指針
- NULL:指向其他類型(如:基本類型、C類型)的空指針
- NSNull:通常表示集合中的空值
使用舉例:
NSString * string= nil;
Class class = Nil;
int *pointerInt = NULL;
[[dict objectforkey:@"zjjb”] isEqualto: [NSNull null]]
補充:
1.為什么上面的array里面的空對象不直接用nil?
[NSNull null]通常可以作為一個數組的占位符,從而是數組的count計算準確
2.為什么需要 NSNULL?
對于像NSArray這樣的類型,nil或NULL不能做為加到其中的Object,如果定義了一個NSArray,為其分配了內存,又想設置其中的內容為空,則可以用[NSNULL null]返回的對象來初始化NSArray中的內容
3.NSNULL,NULL和nil在本質上應該是一樣的,NULL和nil其實就是0
</br>
——————————— 【 MadeBy 紀寶寶 】 ———————————