nil、Nil、NULL、NSNull的区别

来源:互联网 发布:淘宝官方活动报名 编辑:程序博客网 时间:2024/06/04 18:25

nil、Nil、NULL、NSNull的区别

  • nil:指向一个对象的空指针,对objective c id 对象赋空值.

  • Nil:指向一个类的空指针,表示对类进行赋空值.

  • NULL:指向其他类型(如:基本类型、C类型)的空指针, 用于对非对象指针赋空值.

  • NSNull:在集合对象中,表示空值的对象.


  • 1.nil 在指向一个对象的指针为空 定义如下:
#ifndef nil# if __has_feature(cxx_nullptr)#   define nil nullptr# else#   define nil __DARWIN_NULL# endif#endif

在Objective-C中用于id类型的对象

NSString *str = nil;NSURL    *url  = nil;id object      = nil;
  • 2.Nil 指向一个类的指针为空 定义如下:
#ifndef Nil# if __has_feature(cxx_nullptr)#   define Nil nullptr# else#   define Nil __DARWIN_NULL# endif#endif

在Objective-C中用于Class类型的对象

Class Class1 = Nil;Clsss Class2 = [NSURL class];
  • 3.NULL 指向C类型的指针为空 在stddef.h中定义如下:
#if defined(__need_NULL)#undef NULL#ifdef __cplusplus#  if !defined(__MINGW32__) && !defined(_MSC_VER)#    define NULL __null#  else#    define NULL 0#  endif#else#  define NULL ((void*)0)#endif

用于对非对象指针赋空值简单举例

int   *intA    = NULL;char *charC     = NULL;struct structStr = NULL;
  • 4.NSNull在Objective-C中是一个类.

    • NSNull有 + (NSNull *)null; 单例方法.

    • 多用于集合(NSArray,NSDictionary)中值为空的对象.

NSArray *array = [NSArray arrayWithObjects:                      [[NSObject alloc] init],                      [NSNull null],                      @"aaa",                      nil,                      [[NSObject alloc] init],                      [[NSObject alloc] init], nil];NSLog(@"%ld", array.count); // 输出 3,NSArray以nil结尾//NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:                                @"Object0", @"Key0",                                @"Object1", @"Key1",                                nil,        @"Key-nil"                                @"Object2", @"Key2",                                nil];NSLog(@"%@", dictionary); // 输出2个key-value,NSDictionary也是以nil结尾//NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];[mutableDictionary setObject:nil forKey:@"Key-nil"]; // 会引起Crash[mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不会引起Crash//所以在使用时,如下方法是比较安全的[mutableDictionary setObject:(nil == value ? [NSNull null] : value)                      forKey:@"Key"];

文/Jasomzld
原文链接:点我坐飞机

0 0