objective-C nil,Nil,NULL之间的不同

在看书的时候突然看到一个问题,就是关于nil,Nil,NULL有什么不同,怎么使用?

查了一下,在stack overflow上面看到一个很nice的解释,翻译记录一下下。

nil

首先,nil是指一个OC对象的空值表达,如下:

NSString *someString = nil;
NSURL *someURL = nil;
id someObject = nil;
if (anotherObject == nil) // do something

Nil

而Nil则是对于OC Class的空值表达,一般不太会涉及到用一个变量来引用Class,所以,不是很常用。

Class someClass = Nil;
Class anotherClass = [NSString class];

NULL

NULL是对任意C 指针的空值表达。

int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;

NSNull

NSNull是代表一个空值对象的类,意思是,在Class中,返回+ [NSNull null]的那个对象。

它和nil是不同的,因为nil是字面空值,也就是说,nil不是一个对象。

对于single instance来说,NSNull 它可以被看作是一个对象。

NSNull经常用于Foundation集合中因为它们不能存储空值,对于字典,objectForKey: 返回ni意味着给定的键值在字典中没有对应的对象,即,该key值还没有被添加到字典中。

如果关于某个key还没有值,但你想明确表达出来,可以使用[NSNull null]。

下面的表达是违法的,字典中对象不能为nil

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:nil forKey:@"someKey"];

下面是有效的,前面说过,NSNull可以被看作是一个对象。

NSMutableDictionary *dict1 = [NSMutableDictionary dictionary];
[dict1 setObject:[NSNull null] forKey:@"someKey"];
NSLog(@"dic %@",dict1);
--
dic {
  someKey = "<null>";
}

值得一提的是,Foundation集合的初始化动作使用nil作为对象列表结尾的标记,而不必指定列表中元素的数量。这种情况是因为nil无法存储在Foundation集合中。例如,

NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];

原文地址:https://www.cnblogs.com/xiaoqiangink/p/12658806.html

时间: 2024-10-14 08:16:53

objective-C nil,Nil,NULL之间的不同的相关文章

IOS之nil、Nil、NSULL、NULL之间的区别

其实早就想研究一下nil.Nil.NULL和NSNull之间的区别,只是工作上除了nil,其它的几乎少有用到,所以一直拖到今天.有时候感觉自己越来越浮躁,对细微处的知识理解不够深入,因此这里给自己提个醒--在以后的工作当中要始终保持一种钻研的精神! 言归正传,我们来分别介绍一下这四种类型: 一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为ni

nil Nil NULL NSNull 之间的区别

nil -> Null-pointer to objective- c objectNIL -> Null-pointer to objective- c class  表示对类进行赋空值NULL: A null pointer to anything else,  is for C-style memory pointers. 用于对非对象指针赋空值,比如C指针看一下用法NSURL *url = nil:Class  class = Nil:int *pointerInt = NULL:ni

iOS中nil,Nil,NULL之间的区别

1.说明 nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 若obj为nil: [obj message]将返回NO,而不是NSException 若obj为NSNull: [obj message]将抛出异常NSException 2.用法 nil和NULL从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而NULL是将基本类型设置为空

iOS中类和对象,还有nil,Nil,NULL的区别

一.类和对象 类与对象的概念: 1.类是对同一类事物的高度抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法) 2.对象是类的一个实例,是一个具体的事物 3.类其实就是一种数据类型,它的变量就是对象 4.类与类之间的关系--继承关系 eg:学生与小学生,小学生也是学生,所以学生是小学生的父类,小学生是学生的子类 OC与面向对象: 1.对象是oc程序的核心.“万事万物皆对象”是程序中的核心思想 2.类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所具有的成员变量及方法

nil,Nil,NULL和NSNull理解(ios)

nil nil 是 ObjC 对象的字面空值,对应 id 类型的对象,或者使用 @interface 声明的 ObjC 对象. 例如: ? NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; if (anotherObject == nil) // do something 定义: ? // objc.h #ifndef nil # if __has_feature(cxx_nullptr) #   def

类和对象 nil/Nil/NULL的区别

iOS-----类和对象,nil/Nil/NULL的区别 iOS中类和对象,nil/Nil/NULL的区别 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据类型,它的变量就是对象. 类与类之间的关系——继承关系 A是B 如果这句话说的通,在设计程序的时候就可以看成是继承关系. 例如:学生与小学生 小学生也是学生,所以学生是小学生的父类,小学生是学

Objective-c nil, Nil, NULL和NSNull的区别

在OC中可能经常会遇到 nil,Nil,NULL和NSNull,下面分析一下之间的区别: Symbol Value Meaning NULL (void *)0 literal null value for C pointers nil (id)0 literal null value for Objective-C objects Nil (Class)0 literal null value for Objective-C classes NSNull [NSNull null] singl

Objective-C 中nil/Nil/NULL/NSNull

转自:http://nshipster.cn/nil/ 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居民,而原因在于逻辑宇宙的存在不确定性.作为一个逻辑系统的物理体现,电脑面临一个棘手的问题,就是如何用存在表达不存在. 在Objective-C中,有几个不同种类的不存在.这样做的原因要追溯到一个频繁提及的NSHipster,讲解Objective-C如何在C的程序范例以及由Smalltalk启发的面向对象的范例中架起桥梁的. C用0来作为不存在的原始

nil / Nil / NULL / NSNull VS objc_msgSend

[NSNull null]是一个对象,其类为NSNULL(isa):里面没有任何变量.函数.和实现. nil的处理展示出消息机制的优越性,相对于函数调用的空指针处理. ENTRY objc_msgSend # check whether receiver is nil teq     a1, #0 itt eq moveq   a2, #0 bxeq    lr # save registers and load receiver's class for CacheLookup stmfd