闡述
之前有個朋友問我 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 整體比較:
所用資料