美文网首页
IOS中的空值介绍 nil Nil NULL NSNull

IOS中的空值介绍 nil Nil NULL NSNull

作者: 指尖弹灰 | 来源:发表于2016-10-26 06:44 被阅读0次

    if (!json || json == (id)kCFNull) return nil;

    在YYModel中看到这样一句,忽然发现自己对常见的空值有些模糊,于是记录下此文。

    首先看一下它们的定义和用途

    nil  : Defines the id of a null instance    定义实例的空指针

    Nil  : Defines the id of a null class      定义类的空指针

    NULL : 定义其他类型(基本数据类型、C类型、SEL)的空指针

    dic = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions   error:NULL];

    char * q = NULL;

    NSNull :

    The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).

    NSNull类定义了一个单例对象,用于表示集合对象(数组,字典等)中的空值(当某些情况不允许使用nil表示空)。可以通过下面2个例子看一下:

    //  数组中nil是结束标志,所以数组中的空用[NSNull null] 表示

         NSArray *Test = [NSArray arrayWithObjects:@"一万年太久", @"只争朝夕",[NSNull null],nil];

         NSString *FallingWood = [Test objectAtIndex:2];

         if ((NSNull *)FallingWood==[NSNull null]) {

              NSLog(@"数组中的该元素是空");

         }else  {

              NSLog(@"数组中的该元素非空");

    }

    //  字典中nil是结束标志,所以数组中的空用[NSNull null] 表示

    NSDictionary *Test = [NSDictionary dictionaryWithObjectsAndKeys:[NSNull null],@"one",@"difang",@"two", nil];

    NSString *FallingWood = [Test objectForKey:@"one"];

    if ((NSNull *)FallingWood==[NSNull null]) {

             NSLog(@"数组中的该元素是空";

    }else {

             NSLog(@"数组中的该元素非空");

    }

    kFCNull  :  const CFNullRef kCFNull; // the singleton null instance  是NSNull的单例

    因为 NSNull与 CFNullRef 是 Toll-Free Bridging. 所以 NSNull 的类方法

    +(NSNull *)null  //返回值是一个单例子,与kFCNull 相等。

    所以上面的2个例子可以改成:

    if ((NSNull *)FallingWood== kCFNull) {

             NSLog(@"数组中的该元素是空";

    }else {

             NSLog(@"数组中的该元素非空");

    }

    补充:

    Toll-Free Bridging : 有一些数据类型能够同时在 Foundation Framework 和 Core Foundation Framework中使用。这意味着,对于同一个数据类型,你既可以将其作为参数传入 Core Foundation 函数,也可以将其作为接收者对其发送 Objective-C 消息(即调用ObjC类方法)。这种在 Core Foundation 和 Foundation 之间交换使用数据类型的技术就叫 Toll-Free Bridging.

    相关文章

      网友评论

          本文标题:IOS中的空值介绍 nil Nil NULL NSNull

          本文链接:https://www.haomeiwen.com/subject/bmdduttx.html