IOS之nil、Nil、NSULL、NULL之間的區別

來源:互聯網
上載者:User

標籤:

其實早就想研究一下nil、Nil、NULL和NSNull之間的區別,只是工作上除了nil,其它的幾乎少有用到,所以一直拖到今天。有時候感覺自己越來越浮躁,對細微處的知識理解不夠深入,因此這裡給自己提個醒--在以後的工作當中要始終保持一種鑽研的精神!

言歸正傳,我們來分別介紹一下這四種類型:

一、nil

我們給對象賦值時一般會使用object = nil,表示我想把這個對象釋放掉;

或者對象由於某種原因,經過多次release,於是對象引用計數器為0了,系統將這塊記憶體釋放掉,這個時候這個對象為nil,我稱它為“Null 物件”。(注意:我這裡強調的是“Null 物件”,下面我會拿它和“值為空白的對象”作對比!!!)

所以對於這種Null 物件,所有關於retain的操作都會引起程式崩潰,例如字典添加索引值或數組添加新原素等,具體可參考如下代碼:



二、NSNull

NSNull和nil的區別在於,nil是一個Null 物件,已經完全從記憶體中消失了,而如果我們想表達“我們需要有這樣一個容器,但這個容器裡什麼也沒有”的觀念時,我們就用到NSNull,我稱它為“值為空白的對象”。如果你查閱開發文檔你會發現NSNull這個類是繼承NSObject,並且只有一個“+ (NSNull *) null;”類方法。這就說明NSNull對象擁有一個有效記憶體位址,所以在程式中對它的任何引用都是不會導致程式崩潰的。(這裡其實不是完全的,例如從伺服器取回來的資料,如果其中有一個NSNUll對象的字典或者數組,那麼就會出錯)參考代碼如下:



三、Nil

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

 

四、NULL

我們知道Object-C來源於C、支援於C,當然也有別於C。而NULL就是典型C語言的文法,它表示一個null 指標,參考代碼如下:
int *ponit = NULL; 

 

轉載於

http://blog.sina.com.cn/s/blog_4930f8e60101h71b.html

 

IOS之nil、Nil、NSULL、NULL之間的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.