nil - Nil- Null - NSNull的区别

今天去面试看到了关于这几个的区别,由于没有接触多久,对4个属性页有点陌生,回来后详细查阅了资料,得出以下的结论:

本质上来说nil,Nil,NULL和NSNull的值一样的,都为空,
虽然 nil, Nil, NULL和NSNull的值相同,
但是理解它们之间的书面意义才重要,
让代码更加明确,增加可读性。

nil 是给一个对象赋值为空,对应 id 类型的对象,或用@interface 声明的 ObjC 对象
原文:Nil -> Null-pointer to objective - c object

例如:
NSURL *url = nil;
NSString *someString = nil;
NSURL *someURL = nil;
id anyObjC = nil;
Nil 是 ObjC 类 类型的书面空值,对应 Class 类型对象
原文:Nil -> Null-pointer to objective - c class

例如:
Class  class = Nil;
Class anotherClass = [NSString class];
NULL 是任意的 C 指针空值,也或者是基本数据类型为空
null-> null pointer to primitive type or absence of data.

例如:
int *pointerInt = NULL;
int *pointerToInt = NULL;
char *pointerToChar = NULL;
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 - Nil- Null - NSNull的区别)