iOS中的nil、Nil、NULL和NSNull

nil

  • 表示空对象
  • 所有retain相关的操作都会引起程序崩溃
1
2
3
4
5
6
NSMutableArray *array = [NSMutableArray array];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];

id obj = nil;
[array addObject: obj]; // crash
[dic setObject:obj forKey:@"name"]; // crash

Nil

  • 完全等同于nil
  • 常用于类置空,表示一个类的空指针
1
2
3
4
5
6
7
8
9
id obj = nil;
if (obj == nil) {
NSLog(@" obj 为空");
}

Class classA = Nil;
if (classA == Nil) {
NSLog(@"classA 为空类");
}

NULL

  • 指向基本数据类型和c类型的空指针
1
int *point = NULL;

NSNull

  • 通常表示集合中的类型
  • [NSNull null]是一个对象,拥有有效的内存地址
1
2
3
4
5
6
7
8
9
10
NSMutableArray *array = [NSMutableArray array];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];

id obj = nil;
if (obj == nil) {
obj = [NSNull null];
}

[array adObject: obj]; // it's OK
[dic setObject:obj forKey:@"name"]; // it's OK