zoukankan      html  css  js  c++  java
  • 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"];

    每天总结一点点。。

  • 相关阅读:
    Java基础05 构造函数
    Java基础04 类变量、成员变量、局部变量的解析
    Java基础03 八大基本类型以及类型之间的转换
    Java基础02 面向对象编程的三大特性详解
    软件工程作业02
    202009自我介绍
    2019春学期总结
    第十二周作业
    第十一周作业
    第十周作业
  • 原文地址:https://www.cnblogs.com/includeao/p/6404760.html
Copyright © 2011-2022 走看看