其實(shí)早就想研究一下nil树绩、Nil、NULL和NSNull之間的區(qū)別筝蚕,只是工作上除了nil卦碾,其它的幾乎少有用到,所以一直拖到今天起宽。有時(shí)候感覺自己越來越浮躁洲胖,對(duì)細(xì)微處的知識(shí)理解不夠深入,因此這里給自己提個(gè)醒--在以后的工作當(dāng)中要始終保持一種鉆研的精神坯沪!
言歸正傳绿映,我們來分別介紹一下這四種類型:
一、nil
我們給對(duì)象賦值時(shí)一般會(huì)使用object = nil腐晾,表示我想把這個(gè)對(duì)象釋放掉叉弦;
或者對(duì)象由于某種原因,經(jīng)過多次release藻糖,于是對(duì)象引用計(jì)數(shù)器為0了淹冰,系統(tǒng)將這塊內(nèi)存釋放掉,這個(gè)時(shí)候這個(gè)對(duì)象為nil巨柒,我稱它為“空對(duì)象”樱拴。(注意:我這里強(qiáng)調(diào)的是“空對(duì)象”,下面我會(huì)拿它和“值為空的對(duì)象”作對(duì)比Q舐>恰!)
所以對(duì)于這種空對(duì)象芦岂,所有關(guān)于retain的操作都會(huì)引起程序崩潰瘪弓,例如字典添加鍵值或數(shù)組添加新原素等,具體可參考如下代碼:
二禽最、NSNull
NSNull和nil的區(qū)別在于腺怯,nil是一個(gè)空對(duì)象袱饭,已經(jīng)完全從內(nèi)存中消失了,而如果我們想表達(dá)“我們需要有這樣一個(gè)容器呛占,但這個(gè)容器里什么也沒有”的觀念時(shí)虑乖,我們就用到NSNull,我稱它為“值為空的對(duì)象”晾虑。如果你查閱開發(fā)文檔你會(huì)發(fā)現(xiàn)NSNull這個(gè)類是繼承NSObject疹味,并且只有一個(gè)“+ (NSNull *) null;”類方法帜篇。這就說明NSNull對(duì)象擁有一個(gè)有效的內(nèi)存地址糙捺,所以在程序中對(duì)它的任何引用都是不會(huì)導(dǎo)致程序崩潰的。參考代碼如下:
三笙隙、Nil
nil和Nil在使用上是沒有嚴(yán)格限定的洪灯,也就是說凡是使用nil的地方都可以用Nil來代替,反之亦然竟痰。只不過從編程人員的規(guī)約中我們約定俗成地將nil表示一個(gè)空對(duì)象签钩,Nil表示一個(gè)空類。參考代碼如下:
四坏快、NULL
我們知道Object-C來源于C铅檩、支持于C,當(dāng)然也有別于C。而NULL就是典型C語言的語法莽鸿,它表示一個(gè)空指針昧旨,參考代碼如下:
int *ponit = NULL;
原文地址:http://www.reibang.com/p/2b44e1c346e7