在iOS平台里,出现过nil ,Nil ,NULL, NSNull 的区别
Nil: 在系统的定义里:
#ifndef Nil
# if __has_feature(cxx_nullptr)
# define Nil nullptr
# else
# define Nil __DARWIN_NULL
# endif
#endif
实际在Objective-C语言里__DARWIN_NULL的定义是 #define __DARWIN_NULL ((void *)0)
结论:Nil的本质也是 ((void *)0)
nil: 在系统的定义里:
#ifndef nil
# if __has_feature(cxx_nullptr)
# define nil nullptr
# else
# define nil __DARWIN_NULL
# endif
#endif
NSNull:本质上就Objective-C的一个类。其定义:
@interface NSNull : NSObject <NSCopying, NSSecureCoding>
+ (NSNull *)null;
@end
NULL 用于表示C语言指针中的空值。
nil 用于表示Objective-C语言里对象的空值。
Nil 用于表示Objective-C语言类类型(Class)值为空的情况。
总结:不管是NULL 、Nil 、nil它们的本质都是一样的((void*)0),只是写法不同, 这样做意义是为了区分不同的数据类型,增 强代码的可读性。举个例子:当你一看到一个变量赋值为NULL,实际上一下子就能明白, 这个变量是C语言里定义的指针类型。当看到 nil的时候, 就能知道这个变量是Objective-C的对象指针。。。