Object-C中各类空值的分析

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语言)
nil/Nil/NULL/NSNull的区别
http://stackoverflow.com/questions/5908936/difference-between-nil-nil-and-null-in-objective-c
What describes nil best? What's that really?

你可能感兴趣的:(object)