iOS 探討之 nil Nil NULL NSNull

闡述
    之前有個朋友問我 nil 是啥,下意識回答空。接着又問我Nil、NULL、NSNull是啥並有啥區別,頓時懵逼了。哎~ 找點資料彌補一下吧。

探討
- NULL 
C語言用 0 來作爲不存在的原始值,用NULL作爲不存在的指針( (void *) 0 )。
也就是說 NULL 是指向其他類型(如:基本類型、C類型)的空指針, 用於對非對象指針賦空值。

在stddef.h中定義如下:
#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null
#  else
#    define NULL 0
#  endif
#else
#  define NULL ((void*)0)
#endif

- nil
Objective-C 在C語言的表達不存在的基礎上增加了nil,nil是一個指向不存在的對象指針( 可以理解爲 (id) 0 ),用於對Objective-C id對象賦空值

定義如下:
#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif

- Nil
在Foundation/NSObjCRuntime.h中,Nil被定義爲指向0的類指針(可以理解爲 (Class) 0),表示對類進行賦空值

定義如下:
#ifndef Nil
# if __has_feature(cxx_nullptr)
#   define Nil nullptr
# else
#   define Nil __DARWIN_NULL
# endif
#endif

- NSNull
在框架層面上 Foundation 定義了 NSNull 類型,即一個類方法 + null 返回一個單獨的NSNull對象。它是一個實際的對象,不是一個0值(可以理解爲 [NSNull null] ),表示空值的對象

- nil,Nil,NULL,NSNull 整體比較:


所用資料

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