nil
Defines the id of a null instance.定義空實(shí)例的id。
我們給對(duì)象賦值時(shí)一般會(huì)使用object = nil固蚤,表示我想把這個(gè)對(duì)象釋放掉娘汞;
或者對(duì)象由于某種原因,經(jīng)過(guò)多次release夕玩,于是對(duì)象引用計(jì)數(shù)器為0了你弦,系統(tǒng)將這塊內(nèi)存釋放掉,這個(gè)時(shí)候這個(gè)對(duì)象為nil燎孟,我稱它為“空對(duì)象”禽作。(注意:我這里強(qiáng)調(diào)的是“空對(duì)象”,下面我會(huì)拿它和“值為空的對(duì)象”作對(duì)比?场?醭ァ!)
Nil
nil和Nil在使用上是沒(méi)有嚴(yán)格限定的尘喝,也就是說(shuō)凡是使用nil的地方都可以用Nil來(lái)代替磁浇,反之亦然斋陪。只不過(guò)從編程人員的規(guī)約中我們約定俗成地將nil表示一個(gè)空對(duì)象朽褪,Nil表示一個(gè)空類。參考代碼如下:Defines the id of a null class.定義空類的id。
NSNull
我們看一個(gè)NSNull的官方定義
Summary
A singleton object used to represent null values in collection objects that don’t allow nil values.
一個(gè)單例對(duì)象无虚,用于表示不允許空值的集合對(duì)象中的空值缔赠。
NSNull和nil的區(qū)別在于,nil是一個(gè)空對(duì)象友题,已經(jīng)完全從內(nèi)存中消失了嗤堰,而如果我們想表達(dá)“我們需要有這樣一個(gè)容器,但這個(gè)容器里什么也沒(méi)有”的觀念時(shí)度宦,我們就用到NSNull踢匣,我稱它為“值為空的對(duì)象”。如果你查閱開(kāi)發(fā)文檔你會(huì)發(fā)現(xiàn)NSNull這個(gè)類是繼承NSObject戈抄,并且只有一個(gè)“+ (NSNull *) null离唬;”類方法。這就說(shuō)明NSNull對(duì)象擁有一個(gè)有效的內(nèi)存地址划鸽,所以在程序中對(duì)它的任何引用都是不會(huì)導(dǎo)致程序崩潰的输莺。
NULL
NULL是無(wú)類型的,只是一個(gè)宏裸诽,它代表為空嫂用。用于c語(yǔ)言的各種數(shù)據(jù)類型的指針為空。
我們知道Object-C來(lái)源于C丈冬、支持于C,當(dāng)然也有別于C嘱函。而NULL就是典型C語(yǔ)言的語(yǔ)法,它表示一個(gè)空指針埂蕊,參考代碼如下:
int *ponit = NULL;