zoukankan      html  css  js  c++  java
  • [swift、oc]浅聊nil、Nil、NULL、NSNull的区别

    我们都知道nil、Nil、NULL、NSNull都表示为空但是究竟有什么区别,相信大家也很少关注。今天我们就浅聊一下这几个空的区别

    1、nil

      nil一般是指把一个对象置空,既完全是一个空对象,完全从内存中释放。  

    2、Nil

      Nil和nil基本没有任何区别,也可以说只要是可以使用nil的地方都可以使用Nil,反之亦然。但是作为程序猿,我们应该更加严谨一些。nil和Nil的区别在于,nil表示置空一个对象,二Nil表示置空一个类。

    3、NULL

      大家都知道oc 是基于c的,并且oc是完全兼容c的,NULL源于c,表示一个空指针.

      既:int *p  = NULL

    4、NSNull

      NSNull很有意思,大家一般都会觉得,NSNull也是空,但是看着这货又是“NS”开头的很像一个对象,实质上NSNull的确是一个对象,他继承于NSObject。那它和nil的区别在哪里呢?nil是把一对象完全释放,就是完全从内存中释放。但是当我想把一个对象置空但是又想要一个容器的时候,我们就可以使用NSNull。比如一瓶矿泉水,我们不想要里面的水,但是我们想保留瓶子一样。看一下代码的区别

    swift:

    //  定义一个数组

    let mutableArray = NSMutableArray()

    // 定义一个字典

    let mutableDictionary = NSMutableDictionary()

    // 定义NSNull

    let null = NSNull()

    // 添加到数组

    mutableArray.addObject(null)

    // 添加到字典

    mutableDictionary.setObject(null, forKey: "null")

    //***添加NSNull 程序运行很正常,因为 NSNull是一个类有内存地址的,所以添加到字典和数组都不会崩。下面是一下nil

    // 添加nil到数组

    mutableArray.addObject(nil)

    // 添加nul到字典

    mutableDictionary.setObject(nil, forKey: "nill")  

    //***直接报错,因为数组和字典里面存放的都是对象,对象都是有地址的。但是nil内存中没有地址,所以直接报错

     

    下面是oc版本的,用oc的朋友可以参考一下:

    - (void)viewDidLoad {

            [super viewDidLoad];

            NSMutableArray *mutableArray = [NSMutableArray array];

            NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];

          NSNull *null = [NSNull null];

            //  使用NSNull,不会报错会正常运行

            [mutableArray addObject:null];

            [mutableDictionary setObject:null forKey:@"null"];

             // 如果我们使用nil,没运行时回报警告,运行时程序会直接崩溃

           [mutableArray addObject:nil];

           [mutableDictionary setObject:nil forKey:@"nil"];

    }

    以上就是nil、Nil、NULL、NSNull的区别了,在工作中我们一般只使用nil,其他三个我们平时也很少使用。但是作为程序猿的我们,

    这样的问题还是值得我们去了解的。 

  • 相关阅读:
    JSDoc使用指南
    听创始人讲Quora为什么选择Python
    Bootstrap model模态框与百度地图API发生冲突时的解决办法
    使用百度地图API制作线路轨迹播放
    EF+Mysql+DDD框架搭建(一)——code first准备
    RowNumber()分页方法
    设计模式六大原则
    温习.net基础知识(二)装箱和拆箱
    温习.net基础知识(一)基础知识点
    c# 跨域api
  • 原文地址:https://www.cnblogs.com/wanglekai/p/5402816.html
Copyright © 2011-2022 走看看