C用0來作為不存在的原始值亚铁,而NULL作為指針(這在指針環(huán)境中相當(dāng)于0)蝇刀。
Objective-C在C的表達(dá)不存在的基礎(chǔ)上增加了nil吗浩。nil是一個(gè)指向不存在的對(duì)象指針似嗤。雖然它在語義上與NULL不同川背,但它們?cè)诩夹g(shù)上是相等的。
在框架層面规哪,F(xiàn)oundation定義了NSNull求豫,即一個(gè)類方法+null,它返回一個(gè)單獨(dú)的NSNull對(duì)象诉稍。NSNull與nil以及NULL不同蝠嘉,因?yàn)樗且粋€(gè)實(shí)際的對(duì)象,而不是一個(gè)零值均唉。
也許nil最顯著的行為是是晨,它雖然為零,仍然可以有消息發(fā)送給它舔箭。
在其他的語言中,比如C++蚊逢,這樣做會(huì)使你的程序崩潰层扶,但在Objective-C中,在nil上調(diào)用方法返回一個(gè)零值烙荷。這大大的簡(jiǎn)化了表達(dá)镜会,因?yàn)樗苊饬嗽谑褂胣il之前對(duì)它的檢查
// 舉個(gè)例子,這個(gè)表達(dá)...
if(name!=nil&&[nameisEqualToString:@"Steve"]){...}
// …可以被簡(jiǎn)化為:
if([nameisEqualToString:@"steve"]){...}
SNull在Foundation和其它框架中被廣泛的使用终抽,以解決如NSArray和NSDictionary之類的集合不能有nil值的缺陷戳表。你可以將NSNull理解為有效的將NULL或者nil值封裝boxing桶至,以達(dá)到在集合中使用它們的目的:
NSMutableDictionary*Dict=[NSMutableDictionary dictionary];
Dict[@"someKey"]=[NSNullnull];// Sets value of NSNull singleton for`someKey`
NSLog(@"Keys: %@",[mutableDictionaryallKeys]);// @[@"someKey"]