Object-C中各类空值的分析
nil
NULL
object-c
前言
初次接触Object-C时,经常会遇到这样的困惑,使用空值时,什么时候使用nil,什么时候使用NSNULL?而且似乎用NULL也可以,另外Object-c中还有一个Nil。这么多的空值表示容易让人迷惑,下面将能过逐一分析来理清楚这4者的区别。
NULL
NULL本质上是:(void*)0,即指向地址为0x0的指针,用于表示C指针中的空值。
nil
nil的本质上也是(void*)0,但它用于表示表示指向Objective-C中对象的指针的值为空。
Nil
本质上也是(void*)0,用于表示Objective-C类(Class)类型的变量值为空。
NSNull
类定义如下:
@interface NSNull : NSObject <NSCopying, NSSecureCoding>
+ (NSNull *)null;
@end
其中+ (NSNull *)null;
返回一个单例对象,其表示空值。定义NSNull是由于集合对象中不能有nil值,所以用NSNull类来代表在集合对象中的null 值。英文解释:NSNull is a class defines a singleton object used to represent null values in collection objects (which don't allow nil values).
[NSNull null]: The singleton instance of NSNull。
总结:从技术实现上来说,nil、NULL都是一样的。但是实际上这种定义能够增加代码的可读性。如果你给某人传递NULL值,那么某人就认为接收到的是C指针。如果是nil,那么认为接受的是一个对象。而Nil,则认为接受的是class。
参考
区分nil Nil NULL和NSNill(Objective C语言)
http://stackoverflow.com/questions/5908936/difference-between-nil-nil-and-null-in-objective-c
What describes nil best? What's that really?