快速又深入的瞭解OC中的nil、Nil、NULL、NSNull

歡迎到我的個人域名博客:http://zhoulingyu.com


在網上看過很多介紹,但是還是會暈掉,一大堆繞口的定義,比如下面這些:

nil: 指向oc中對象的空指針,計數器0
Nil: 指向oc中類的空指針
NULL: 指向其他類型的空指針,如一個c類型的內存指針
NSNull: 在集合對象中,表示空值的對象。

這樣的顯然不能幫助更好的理解,那麼結合源碼再去理解:

nil: #define nil ((id)0)——–>指向oc中對象的空指針
NULL:#define NULL ((void *)0)——–>NULL其實是C語言中的定義
NSNull: 用在不能使用nil的場合。——–>下面會進行詳細描述

NSNull補充

對於NSNull,如果還是困難,那就記住這一句話:NSNull是nil的對象形式。

爲什麼要這樣呢?舉個例子,OC中的數組內可以保存所有類型對象,但是不能保存基本類型。
NSArray裏不能放入int、double這樣類型的,只能放入對象。那麼這時候如果你想向數組存入一個空對象,存nil是不合理的,這時就可以用NSNull代替。所以說NSNull是nil的對象形式。

nil和NSNull除了類型完全沒有區別嗎

實際上是有的:
若obj爲nil:
[obj message]將返回NO,而不是NSException
若obj爲NSNull:
[obj message]將拋出異常NSException,即NSNull類似於Java的null,可以報空指針錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章