nil 和 Nil 都 Objective-C Runtime
里面的常量,它们的值都是 __DARWIN_NULL
。
在实际使用中,nil 用于指向空实例
, Nil 用于指向空类
。
NULL 是 C 中空指针
。它被定义为地址为零的常量指针。
# define NULL ((void*)0)
NSNull 类定义了一个用于代替无法使用空值
的地方(比如NSArray,NSDictionary)。
NSNull *nullValue = [NSNull null];
NSArray *arrayWithNull = @[nullValue];
NSLog(@"arrayWithNull: %@", arrayWithNull);
// Output: "arrayWithNull: (<null>)"
需要注意的是,NSNull 实例,无法和No、false 等价。
下面是检测 NSNull的方法。
id aValue = [arrayWithNull objectAtIndex:0];
if (aValue == nil) {
NSLog(@"equals nil");
}
else if (aValue == [NSNull null]) {
NSLog(@"equals NSNull instance");
if ([aValue isEqual:nil]) {
NSLog(@"isEqual:nil");
}
}
// Output: "equals NSNull instance"
// Output: "arrayWithNull: (<null>)"