Objective-C nil,Nil,NULL 和 NSNull 的区别

在 OC 中有几种空类型的写法,他们之间是有一定的区别的

nil: 对象为空。

(id)0, literal null value for Objective-C objects

定义某一个实例对象的值为空:

1
2
3
4
5
6
7
NSObject * obj = nil;
if(nil == obj){
NSLog(@"对象为空");
}
else{
NSLog(@"对象不为空");
}

Nil: 类为空

(Class)0, literal null value for Objective-C classes

定义某一个类是空的:

1
2
Class oneClass = Nil;
Class anotherClass = [NSString class];

NULL: 基本数据类型指针为空

(void *)0, literal null value for C pointers

C 语言的各种数据类型的空指针:

1
2
3
int * pointerToInt = NULL;
char * pointerToChar = NULL;
struct TreeNode * root = NULL;

NSNull

[NSNull null], singleton object used to represent null

集合对象不能用 nil 来作为具体的一个值,所以用一个特定的对象 NSnull 来表示:

1
2
3
NSMutableDictionary * dic = [NSMutableDictionary dictionary];
dic[@"oneKey"] = [NSNull null];
NSLog(@"keys : %@", [dic allKeys]);