nil和Nil及NULL和NSNull的區(qū)別 - OC

一、nil
我們給對象賦值時一般會使用object = nil,表示我想把這個對象釋放掉;
或者對象由于某種原因,經(jīng)過多次release,于是對象引用計數(shù)器為0了,系統(tǒng)將這塊內(nèi)存釋放掉,這個時候這個對象為nil,我稱它為“空對象”。(注意:我這里強調(diào)的是“空對象”,下面我會拿它和“值為空的對象”作對比!?。。?br> 所以對于這種空對象,所有關(guān)于retain的操作都會引起程序崩潰,例如字典添加鍵值或數(shù)組添加新原素等,具體可參考如下代碼:

image.png

二、NSNull
NSNull和nil的區(qū)別在于,nil是一個空對象,已經(jīng)完全從內(nèi)存中消失了,而如果我們想表達“我們需要有這樣一個容器,但這個容器里什么也沒有”的觀念時,我們就用到NSNull,我稱它為“值為空的對象”。如果你查閱開發(fā)文檔你會發(fā)現(xiàn)NSNull這個類是繼承NSObject,并且只有一個“+ (NSNull *) null;”類方法。這就說明NSNull對象擁有一個有效的內(nèi)存地址,所以在程序中對它的任何引用都是不會導(dǎo)致程序崩潰的。參考代碼如下:

三、Nil
nil和Nil在使用上是沒有嚴格限定的,也就是說凡是使用nil的地方都可以用Nil來代替,反之亦然。只不過從編程人員的規(guī)約中我們約定俗成地將nil表示一個空對象,Nil表示一個空類。參考代碼如下:

四、NULL
我們知道Object-C來源于C、支持于C,當(dāng)然也有別于C。而NULL就是典型C語言的語法,它表示一個空指針,
int *ponit = NULL;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容