OC里面的空 nil,Nil,null,NSNull

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: ()"

需要注意的是,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: ()"

参考文章

  • stddef.h
  • https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/NumbersandValues/Articles/Null.html
  • http://www.opensource.apple.com/source/objc4/objc4-371.1/runtime/objc.h

你可能感兴趣的:(OC里面的空 nil,Nil,null,NSNull)