`
anlulu
  • 浏览: 43551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS中nil,NSNUll,Nil的区别

    博客分类:
  • ios7
iOS 
阅读更多

nil: A null pointer to an Objective-C object.
( #define nil ((id)0)  )

Nil: A null pointer to an Objective-C class.

NULL: A null pointer to anything else,  is for C-style memory pointers.
( #define NULL ((void *)0)  )


NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values).
[NSNull null]: The singleton instance of NSNull.

 

Technically they're all the same,,, but in practice they give someone reading your code some hints about what's going on; just like naming classes with a capital letter and instances with lowercase is recommended, but not required.

If someone sees you passing NULL, they know the receiver expects a C pointer. If they see nil, they know the receiver is expecting an object. If they see Nil, they know the receiver is expecting a class. Readability.

 

if obj is nil , [obj message] will return NO, without NSException
if obj is NSNull , [obj message will throw a NSException

 

Demo1:

       [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


Demo2:

        NSObject *obj1;
        if (obj1 != nil) {
            NSLog(@"object is not nil");
        }else
        {
            NSLog(@"object is nil");
        }
        
        testClass *c1;
        if (c1 != Nil) {
            NSLog(@"class is not Nil");
        }else
        {
            NSLog(@"class is Nil");
        }
        
        int *money;
        if (money != NULL) {
            NSLog(@"money is not NULL");
        }else
        {
            NSLog(@"money is NULL");
        }


Demo3:

        NSObject *obj1 = [[NSObject alloc] init];
        NSObject *obj2 = [NSNull null];
        NSObject *obj3 = [NSObject new];
        NSObject *obj4;
        NSArray *arr1 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
        NSLog(@"arr1 count: %ld", [arr1 count]);    //arr1 count: 3

        NSObject *obj1;
        NSObject *obj2 = [[NSObject alloc] init];
        NSObject *obj3 = [NSNull null];
        NSObject *obj4 = [NSObject new];
        NSArray *arr2 = [NSArray arrayWithObjects:obj1, obj2, obj3, obj4, nil];
        NSLog(@"arr2 count: %ld", [arr2 count]);   //arr2 count: 0


Demo4:

        //有异常!        NSObject *obj1 = [NSNull null];
        NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
        for (NSString *str in arr1) {
            NSLog(@"array object: %@", [str lowercaseString]);
        }

        //修改        NSObject *obj1 = [NSNull null];
        NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
        for (NSString *str in arr1) {
            if (![str isEqual:[NSNull null]]){
                NSLog(@"array object: %@", [str lowercaseString]);
            }
        } 
分享到:
评论

相关推荐

    总结IOS中nil、Nil、NULL和NSNull区别

    在Objective-C编程中,了解nil、Nil、NULL和NSNull之间的区别至关重要,因为它们在不同场景下有着不同的用途和含义。下面将逐一详细介绍这些概念。 1. **NULL** NULL是C语言中的一个宏,用来表示空指针。在C语言中...

    iOS中nil、Nil、NULL、NSNull详解

    在iOS开发中,我们经常会遇到各种表示空值的符号,如nil、Nil、NULL和NSNull。理解它们的区别和用途是编写清晰、可维护代码的关键。 1. nil nil是Objective-C中的对象空值,主要用于表示id类型或者使用@interface...

    ios-清理模型中的nil.zip

    标题"ios-清理模型中的nil.zip"所涉及的内容就是关于如何在模型转换过程中有效地处理这些`nil`或`null`值,以避免程序运行时出现异常。 描述中提到的"清理字典转模型后模型中的nil,属性多于字典,服务器返回为null...

    ios-后台返回数据排空(nsnull nil)处理.zip

    在iOS开发中,后台返回的数据排空,即`NSNull`或`nil`值的处理,是一个常见的问题,尤其在与服务器进行数据交互时。服务器返回的数据可能存在缺失或者异常,导致程序在解析过程中可能出现崩溃。本教程将深入探讨如何...

    IOS 基础之nil,NULL,NSNULL区别详解

    IOS 基础之nil,NULL,NSNULL区别详解 ① nil:一般赋值给空对象。 ② NULL:NULL 是一个通用指针(泛型指针)。 一般赋值给 nil 之外的其他空值。如SEL等。 ③ NSNULL:[NSNull null] 是一个对象,他用在不能使用 ...

    解决iOS中常见的几种Crash1

    其次,字典插入nil值或读取`NSNULL`也会导致崩溃。处理方式与数组类似,通过Method Swizzling修改`NSDictionary`的方法,如`objectForKey:`,在执行操作前进行类型检查,避免将nil插入或从字典中取出时出现问题。...

    IOS 开发之对象为空的判断(nil、null)详解

    总之,理解和正确使用`nil`和`null`,以及它们与不同对象类型的交互,是iOS开发中必不可少的技能。通过上述的判断方式,开发者可以确保在处理可能为空的对象时避免运行时错误,从而提高应用的稳定性和用户体验。希望...

    iOS中json解析出现的null,nil,NSNumber的解决办法

    通过以上方法,可以有效地处理iOS开发中JSON解析时遇到的`null`、`nil`和`NSNumber`问题,确保应用的稳定性和安全性。在实际开发中,选择最适合项目需求的解决方案,并保持代码的可读性和可维护性。

    son数据去除nsnull

    总的来说,处理JSON数据中的`NSNull`对象是iOS开发中的常见任务,通过上述方法,我们可以确保数据的准确性和程序的稳定性。在实际开发中,根据项目的具体需求和已有的技术栈选择合适的方法,既能提高代码的可读性,...

    IOS 去null

    在iOS开发中,JSON解析是常见的任务,但处理null值时常常会遇到问题。"IOS 去null"这个主题主要是关于如何优雅地处理JSON解析过程中遇到的null值,以避免程序运行时出现异常。这里我们将深入探讨这个问题,并通过...

    NilSafe分类

    在iOS开发中,Objective-C是主要的编程语言之一,它提供了丰富的数据结构,如NSArray和NSDictionary,用于存储和处理数据。然而,Objective-C中的这些集合类对null对象(nil)的处理并不友好,直接向数组或字典中...

    马上着手开发 iOS 应用程序

    此外,NSNull在处理nil值时作为占位符的使用也是iOS开发中的一个重要知识点。 在创建数据方面,开发者需要学习如何创建数据类,载入数据,并将其显示在界面上。在教程中,开发者会通过创建一个待办事项列表应用程序...

    Start Developing iOS Apps Today(objective-c)

    此外,处理nil值时可使用NSNull来表示空值。 7. 自定义类和对象: 开发者还需学会如何编写自定义类,包括声明和实现类,以及如何定义类的接口和实现部分。对象的数据属性和行为方法也是构建应用程序时必须掌握的...

    RoadMapiOS.pdf

    文档提到如何使用NSNull来表示nil值,并介绍了如何声明和实现自定义类,这是开发过程中非常重要的一个环节。 7. 接口与实现(Interface and Implementation):接口定义了对象的数据存储方式,而实现则定义了对象的...

    iOS中setValue和setObject的区别详解

    在iOS开发中,当涉及到字典操作时,`setValue:forKey:` 和 `setObject:ForKey:` 是两个常见的方法,但它们在使用上有明显的差异。本文将深入解析这两个方法的区别,帮助开发者更好地理解和运用。 首先,`setObject:...

    iOS Notification正向传值

    在iOS开发中,数据传输是应用之间或应用内部组件间通信的重要部分。"iOS Notification正向传值"指的是通过苹果的Notification Center服务实现从一个对象(发送者)向另一个对象(接收者)传递数据的方式。这种方法...

Global site tag (gtag.js) - Google Analytics