zoukankan      html  css  js  c++  java
  • iOS的nil,Null,NSNull的使用

    今天做项目时,在数组里面取值时,发现里面有NSNull的对象,然后用数组里面对应的对象赋值时出现各种问题,总是报错。后面经过研究和查资料,总算解决了这一问题。

      nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。

     1、nil:一般赋值给空对象;

    2、NULL:一般赋值给nil之外的其他空值。如SEL等;

        [NSApp beginSheet:sheet
                    modalForWindow:mainWindow

                    modalDelegate:nil //pointing to an object

                    didEndSelector:NULL //pointing to a non object/class

                    contextInfo:NULL]; //pointing to a non object/class

    3、NSNULL:NSNull只有一个方法:+ (NSNull *) null;

      [NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值.   [NSNull null]是一个对象,他用在不能使用nil的场合。

    4、当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去;

      而向NSNull的对象发送消息时会收到异常。

    因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:+ (NSNull *) null。

    今天做项目的时候就遇到要判断数组元素是否为空,我的以下写法,都无效
    if(!element)
    if([element length]>0)
    if(element== NULL)
    if(element == Nil)
     
         判断数组和字典里面元素是否为空的正确方法为:

        判断数组对象的里面元素是否为空  

    NSString *element = [array objectAtIndex:2];  

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

    }  

     判断字典对象的里面元素是否为空  

        NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:      @"iPhone", @"First", @"iPad", @"Second", nil];  

    1. NSString *value = [dictionary objectForKey:@"First"];  
    2. if ((NSNull *)value == [NSNull null]) {  
    3. }  
  • 相关阅读:
    【Git】Git 学习笔记(一)
    【工程 Shell】Shell 学习(一)
    Vue 使用 Antd 简单实现左侧菜单栏和面包屑功能
    GoF的23种设计模式的功能
    ASP 对数据库的操作
    注册表修改USB状态(开与关)
    EXE文件关联修复
    CentOS8安装Docker
    GoogleEarth无法连接服务器解决方法
    【转】Qt 实现的拷贝 文件/文件夹 的函数
  • 原文地址:https://www.cnblogs.com/jx66/p/5057183.html
Copyright © 2011-2022 走看看