最近新浪面试问了这么个问题:nil、Nil、NULL、NSNull的区别,当时没有回答出来,平时用的时候也没有特别在意这个问题。现在找好资料总结一下。
nil
nil是ObjC对象的字面空值,对应id类型的对象或者使用@interface声明的ObjC对象
例如:
NSString *str = nil;
NSArray *array = nil;
id objc = nil;
if(self == nil){...}
Nil
Nil是Objc类类型的书面空值,对应Class类型对象。
例如:
Class someClass = Nil;
Class antherClass = [NSString class];
NULL
NULL是任意C指针空值
例如:
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
NSNull
NSNull是一个代表空值的类,是一个ObjC对象,实际上它只有一个单例方法:+[NSNull null],一般用于表示集合中值为空的对象。
例如:
// 因为 nil 被用来用为集合结束的标志,所以 nil 不能存储在 Foundation 集合里。
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
// 错误的使用
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:nil forKey:@"someKey"];
// 正确的使用
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNull null] forKey:@"someKey"];
NIL或NSNil
这两个不存在。