nil
是 Objective-C 对象的文字 null 值,对应于抽象类型id
或通过以下方式声明的任何 Objective-C 类型@interface
。例如:
NSString *someString = nil;
NSURL *someURL = nil;
id someObject = nil;
if (anotherObject == nil) // do something
Nil
是 Objective-C 类的文字 null 值,对应于类型Class
。由于大多数代码不需要变量来引用类,因此它的使用并不常见。一个例子是:
Class someClass = Nil;
Class anotherClass = [NSString class];
NULL
是任意 C 指针的文字 null 值。例如,
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
NSNull
是表示 null 的对象的类。事实上,只有一个对象,即返回的对象+[NSNull null]
。它不同于nil
因为nil
是一个文字 null 值,即它不是一个对象。的单个实例NSNull
另一方面, 是一个适当的对象。
NSNull
经常用于基金会集合,因为它们无法存储nil
价值观。就字典而言,-objectForKey:
回报nil
表示给定的键在字典中没有对应的对象,即该键尚未添加到字典中。如果你想明确表示你有某个键但它还没有值,你可以使用[NSNull null]
.
例如,以下内容会引发异常,因为字典无法存储nil
values:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:nil forKey:@"someKey"];
另一方面,以下代码是有效的,因为[NSNull null]
是一个非nil
object:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNull null] forKey:@"someKey"];
值得一提的是,Foundation 集合有使用初始化器nil
作为对象列表末尾的标记,而无需指定列表中的元素数量。这只能发生,因为nil
无法存储在 Foundation 集合中。例如,
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
As for NIL
or NSNil
,Objective-C或Apple Foundation中没有这样的东西。