Objective C语言中nil、Nil、NULL、NSNull的区别

以下内容是基于搜集整理的网上资料,供参考。

nil:指向Objective C语言中对象的空指针,其定义值为(id)0。

Nil:指向Objective C语言中类(Class)的空指针,其定义值为(Class)0。

NULL:指向C语言中的标准空指针,其定义值为(void *)0。

NSNull:在Objective C语言的集合对象中,表示空值的对象,其定义值为[NSNull null]。[NSNull null]是一个对象,用在不能使用nil的场合。

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

若obj为nil:[obj message]将返回NO,而不是NSException。

若obj为NSNull:[obj message]将抛出异常NSException。

时间: 2024-08-03 13:24:35

Objective C语言中nil、Nil、NULL、NSNull的区别的相关文章

iOS中使用nil NULL NSNULL的区别

nil NULL NSNULL的区别主要以下几点 1.nil:一般赋值给空对象 2.NLL:一般赋值给nil之外的其他空值.入SEL等. 3.NSULL:NSNULL只有一种方法+ (NSNull *) null; [NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值 4.注意:当想ni发送信息的时候,返回NO,不会有异常,程序可以继续执行下去:而向NSNULL对象发送消息的时候会收到异常 nil: A null pointer to an

nil / Nil / NULL / NSNull 的区别

NULL在C中被定义,但是C并不包括nil.Nil和NSNull,这三者属于Objective-C(下称OC)部分. NULL是什么? int *a = NULL; A null pointer to anything else, is for C-style memory pointers. 它是C类型的一个指针变量,确切地说是一个空指针,不指向任何地方,在内存上它的值被设置为0.比如说int *pointer = NULL,指针变量pointer在内存里的值为0,不指向任何地方. 本质:空指

c语言中 int *p = NULL 和 *p = NULL 有什么区别

c语言中 int *p = NULL 和 *p = NULL 有什么区别 1. int *p = NULL; 代表定义一个指向整型变量的指针p,然后p的值设为NULL,也就是设为0:用另一种方式说,就是对一个刚定义的指向整型变量的指针,赋初始值,让其指向0地址. 2. *p = NULL; 代表对一个由指针p指向的变量(什么类型,不知道),赋值为0,是将那个变量赋值为0. 我们可以先看下面的代码: 1 int *p = NULL; 这时候我们可以通过编译器查看p的值为0x00000000. 这句

nil/Nil/NULL/NSNull的区别

平时开发过程中经常遇到这几个表示空的关键字:nil.Nil.NULL,一向搞不清楚,作为一个有两年开发经验的程序员,连那么基础的东西都不知道未免太丢人了. 首先要说明的是,nil.Nil.NULL三个关键字和NSNull类都是表示空,只是用处不一样,具体的区别如下: 一.NULL 1.声明位置 stddef.h文件 2.定义 [objc] view plaincopy #undef NULL #ifdef __cplusplus #  if !defined(__MINGW32__) &&

[转]理解Go语言中的nil

最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频. nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟悉的了: if err != nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常.那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值.零值,zero value,是不是有点

在ios开发中nil和NUll和Nilde区别————和如何判断连个对象的关系

nil表示一个对象指针为空,针对对象 >示例代码: NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; if (anotherObject == nil) // do something Nil表示一个类指针为空,针对类 >示例代码: Class someClass = Nil; Class anotherClass = [NSString class]; NULL表示基本数据类型为空,基本类型 >

c语言中void *和NULL

1.  int *str = NULL; #define NULL    ((void *)0) 空指针实质上是有指向的指针,但它指向的地址是很小的地址,约定俗成为地址0. 2. void *void * 类型指针,这个类型指针指向了实实在在的存放数据的地址,但是该地址存放的数据的数据类型我们暂时不知道. 3. const void *a这是定义了一个指针a,a可以指向任意类型的值,但它指向的值必须是常量.在这种情况下,我们不能修改被指向的对象,但可以使指针指向其他对象. 原文地址:https:

c语言中,宏和函数的区别

一.代码长度:宏是完全替换,插入到程序里使得代码变长: 函数代码是只出现在一个地方,使用时则去那里调用. 二.执行速度:宏更快一些,因为在预编译阶段都已完成: 函数则慢一点,因为需要调用以及返回(压栈/出栈)额外时间. 三.操作符优先级:宏有时要少加括号而导致计算逻辑出错: 函数最后只将值返回来,结果容易预测. 四.参数求值:宏每次都要计算: 函数只需要计算一次,之后多次调用并不会导致多次求值而出错. 五.参数类型:宏不关心类型,只要参数操作合法就可以: 函数类型要一致,不同类型则需要不同函数.

C语言中的typedef跟define的区别

今天用C语言练习时涉及到了typedef和define的使用问题,那么他们的区别是啥?这种情况下为什么要用typedef?哪种情况下为什么要用define呢? 学习C的时候的你是否考虑过这个问题呢? 今天我决定梳理一下,以备后用. 相同点: 1.都可以给变量起别名 不同点: 1.define定义后可以扩展,而typedef则不可以. 1 //定义完一个整型的数据后补充定义为无符号的 2 3 #define zhengxing int 4 unsigned zhengxing;//正确 5 6 t