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]); } }
相关推荐
在Objective-C编程中,了解nil、Nil、NULL和NSNull之间的区别至关重要,因为它们在不同场景下有着不同的用途和含义。下面将逐一详细介绍这些概念。 1. **NULL** NULL是C语言中的一个宏,用来表示空指针。在C语言中...
在iOS开发中,我们经常会遇到各种表示空值的符号,如nil、Nil、NULL和NSNull。理解它们的区别和用途是编写清晰、可维护代码的关键。 1. nil nil是Objective-C中的对象空值,主要用于表示id类型或者使用@interface...
标题"ios-清理模型中的nil.zip"所涉及的内容就是关于如何在模型转换过程中有效地处理这些`nil`或`null`值,以避免程序运行时出现异常。 描述中提到的"清理字典转模型后模型中的nil,属性多于字典,服务器返回为null...
在iOS开发中,后台返回的数据排空,即`NSNull`或`nil`值的处理,是一个常见的问题,尤其在与服务器进行数据交互时。服务器返回的数据可能存在缺失或者异常,导致程序在解析过程中可能出现崩溃。本教程将深入探讨如何...
IOS 基础之nil,NULL,NSNULL区别详解 ① nil:一般赋值给空对象。 ② NULL:NULL 是一个通用指针(泛型指针)。 一般赋值给 nil 之外的其他空值。如SEL等。 ③ NSNULL:[NSNull null] 是一个对象,他用在不能使用 ...
其次,字典插入nil值或读取`NSNULL`也会导致崩溃。处理方式与数组类似,通过Method Swizzling修改`NSDictionary`的方法,如`objectForKey:`,在执行操作前进行类型检查,避免将nil插入或从字典中取出时出现问题。...
总之,理解和正确使用`nil`和`null`,以及它们与不同对象类型的交互,是iOS开发中必不可少的技能。通过上述的判断方式,开发者可以确保在处理可能为空的对象时避免运行时错误,从而提高应用的稳定性和用户体验。希望...
通过以上方法,可以有效地处理iOS开发中JSON解析时遇到的`null`、`nil`和`NSNumber`问题,确保应用的稳定性和安全性。在实际开发中,选择最适合项目需求的解决方案,并保持代码的可读性和可维护性。
总的来说,处理JSON数据中的`NSNull`对象是iOS开发中的常见任务,通过上述方法,我们可以确保数据的准确性和程序的稳定性。在实际开发中,根据项目的具体需求和已有的技术栈选择合适的方法,既能提高代码的可读性,...
在iOS开发中,JSON解析是常见的任务,但处理null值时常常会遇到问题。"IOS 去null"这个主题主要是关于如何优雅地处理JSON解析过程中遇到的null值,以避免程序运行时出现异常。这里我们将深入探讨这个问题,并通过...
在iOS开发中,Objective-C是主要的编程语言之一,它提供了丰富的数据结构,如NSArray和NSDictionary,用于存储和处理数据。然而,Objective-C中的这些集合类对null对象(nil)的处理并不友好,直接向数组或字典中...
此外,NSNull在处理nil值时作为占位符的使用也是iOS开发中的一个重要知识点。 在创建数据方面,开发者需要学习如何创建数据类,载入数据,并将其显示在界面上。在教程中,开发者会通过创建一个待办事项列表应用程序...
此外,处理nil值时可使用NSNull来表示空值。 7. 自定义类和对象: 开发者还需学会如何编写自定义类,包括声明和实现类,以及如何定义类的接口和实现部分。对象的数据属性和行为方法也是构建应用程序时必须掌握的...
文档提到如何使用NSNull来表示nil值,并介绍了如何声明和实现自定义类,这是开发过程中非常重要的一个环节。 7. 接口与实现(Interface and Implementation):接口定义了对象的数据存储方式,而实现则定义了对象的...
在iOS开发中,当涉及到字典操作时,`setValue:forKey:` 和 `setObject:ForKey:` 是两个常见的方法,但它们在使用上有明显的差异。本文将深入解析这两个方法的区别,帮助开发者更好地理解和运用。 首先,`setObject:...
在iOS开发中,数据传输是应用之间或应用内部组件间通信的重要部分。"iOS Notification正向传值"指的是通过苹果的Notification Center服务实现从一个对象(发送者)向另一个对象(接收者)传递数据的方式。这种方法...