NULL
C语言中代表空指针
nullptr
C++中的空指针
nil和Nil
nil定义为实例对象的空值(a null instance)
Nil定义为类对象的空值(a null class)
Swift 1.2 目前只有nil而没有Nil。任何类型的可选值都可以被设置为nil,不只是对象(object)类型。
NSNull
@interface NSNull : NSObject <nscopying, nssecurecoding>
+ (NSNull *)null;
@end</nscopying, nssecurecoding>
**NSNull是个单例,只有一个方法null,也用来表示空值。但它出现在一些nil无法胜任的场景来替代nil来表示空值。比如NSArray和NSDictionary中nil代表数组或字典的末尾(即使nil不出现在末尾,也会将其切断,nil后面的值会丢失),此时只能用NSNull对象来表示空值
NSNull *nullValue = [NSNull null];
NSArray *arrayWithNull = @[nullValue];
NSLog(@"arrayWithNull: %@", arrayWithNull);
// Output: "arrayWithNull: (<null>)"</null>
虽然NSNull语义上等同于nil,但两者的值是不相同的:
**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");
}
}