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 整体比较:


所用资料

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