1、nil
編程
咱們給對象賦值時通常會使用object = nil,表示我想把這個對象釋放掉;數組
或者對象因爲某種緣由,通過屢次release,因而對象引用計數器爲0了,系統將這塊內存釋放掉,這個時候這個對象爲nil,我稱它爲「空對象」。(注意:我這裏強調的是「空對象」,下面我會拿它和「值爲空的對象」做對比!!!)spa
因此對於這種空對象,全部關於retain的操做都會引發程序崩潰,例如字典添加鍵值或數組添加新原素等。指針
2、NSNull對象
NSNull和nil的區別在於,nil是一個空對象,已經徹底從內存中消失了,而若是咱們想表達「咱們須要有這樣一個容器,但這個容器裏什麼也沒有」的觀念時,咱們就用到NSNull,我稱它爲「值爲空的對象」。若是你查閱開發文檔你會發現NSNull這個類是繼承NSObject,而且只有一個「+ (NSNull *) null;」類方法。這就說明NSNull對象擁有一個有效的內存地址,因此在程序中對它的任何引用都是不會致使程序崩潰的。繼承
3、Nil內存
nil和Nil在使用上是沒有嚴格限定的,也就是說凡是使用nil的地方均可以用Nil來代替,反之亦然。只不過從編程人員的規約中咱們約定俗成地將nil表示一個空對象,Nil表示一個空類。參考代碼以下:開發
nil、Nil、NULL和NSNull的理解文檔
4、NULL
it
咱們知道Object-C來源於C、支持於C,固然也有別於C。而NULL就是典型C語言的語法,它表示一個空指針,參考代碼以下:
int *ponit = NULL;