都表示不存在.在Objective-C中,有幾個不同種類的不存在煌茴。這樣做的原因要追溯到一個頻繁提及的NSHipster随闺,講解Objective-C如何在C的程序范例以及由Smalltalk啟發(fā)的面向?qū)ο蟮姆独屑芷饦蛄旱摹?/p>
C用0
來作為不存在的原始值矩乐,而NULL
作為指針撒璧。
Objective-C在C的表達不存在的基礎上增加了nil
。nil
是一個指向不存在的對象指針繁调。雖然它在語義上與NULL
不同蹄胰,但它們在技術上是相等的。
在框架層面宾袜,F(xiàn)oundation定義了NSNull
,即一個類方法+null
月培,它返回一個單獨的NSNull
對象杉畜。NSNull
與nil
以及NULL
不同匾荆,因為它是一個實際的對象牙丽,而不是一個零值。
解決如NSArray和NSDictionary之類的集合不能有nil值的缺陷.
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
mutableDictionary[@"someKey"] = [NSNull null]; // Sets value of NSNull singleton for `someKey`
NSLog(@"Keys: %@", [mutableDictionary allKeys]); // @[@"someKey"]
對比如下:
標志 | 值 | 含義 |
---|---|---|
NULL | (void *)0 | C指針 的字面零值 |
nil | (id)0 | Objective-C對象 的字面零值 |
Nil | (Class)0 | Objective-C類 的字面零值 |
NSNull | [NSNull null] | 用來表示零值的單獨的對象
|
參考:偉哥