nil、Nil、NULL、NSNull的区别

nil:指向一个对象的空指针,对objective c id 对象赋空值.

Nil:指向一个类的空指针,表示对类进行赋空值.

NULL:指向其他类型(如:基本类型、C类型)的空指针, 用于对非对象指针赋空值.

NSNull:在集合对象中,表示空值的对象.

1.nil 在指向一个对象的指针为空 定义如下:

#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif

在Objective-C中用于id类型的对象

NSString *str = nil;
NSURL    *url  = nil;
id object      = nil;

2.Nil 指向一个类的指针为空 定义如下:

#ifndef Nil
# if __has_feature(cxx_nullptr)
#   define Nil nullptr
# else
#   define Nil __DARWIN_NULL
# endif
#endif

在Objective-C中用于Class类型的对象

Class Class1 = Nil;
Clsss Class2 = [NSURL class];

3.NULL 指向C类型的指针为空 在stddef.h中定义如下:

#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null
#  else
#    define NULL 0
#  endif
#else
#  define NULL ((void*)0)
#endif

用于对非对象指针赋空值简单举例

int   *intA    = NULL;
char *charC     = NULL;
struct structStr = NULL;

4.NSNull在Objective-C中是一个类.

NSNull有 + (NSNull *)null; 单例方法.

多用于集合(NSArray,NSDictionary)中值为空的对象.

NSArray *array = [NSArray arrayWithObjects:
                      [[NSObject alloc] init],
                      [NSNull null],
                      @"aaa",
                      nil,
                      [[NSObject alloc] init],
                      [[NSObject alloc] init], nil];

NSLog(@"%ld", array.count); // 输出 3,NSArray以nil结尾

//

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                @"Object0", @"Key0",
                                @"Object1", @"Key1",
                                nil,        @"Key-nil"
                                @"Object2", @"Key2",
                                nil];
NSLog(@"%@", dictionary); // 输出2个key-value,NSDictionary也是以nil结尾

//

NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
[mutableDictionary setObject:nil forKey:@"Key-nil"]; // 会引起Crash
[mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不会引起Crash
//所以在使用时,如下方法是比较安全的
[mutableDictionary setObject:(nil == value ? [NSNull null] : value)
                      forKey:@"Key"];

文/Jasomzl(简书作者)
原文链接:http://www.jianshu.com/p/c01e875686d3
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-07-31 06:04:16

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,不指向任何地方. 本质:空指

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__) &&

在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表示基本数据类型为空,基本类型 >

[swift、oc]浅聊nil、Nil、NULL、NSNull的区别

我们都知道nil.Nil.NULL.NSNull都表示为空但是究竟有什么区别,相信大家也很少关注.今天我们就浅聊一下这几个空的区别 1.nil nil一般是指把一个对象置空,既完全是一个空对象,完全从内存中释放. 2.Nil Nil和nil基本没有任何区别,也可以说只要是可以使用nil的地方都可以使用Nil,反之亦然.但是作为程序猿,我们应该更加严谨一些.nil和Nil的区别在于,nil表示置空一个对象,二Nil表示置空一个类. 3.NULL 大家都知道oc 是基于c的,并且oc是完全兼容c的,

iOS_nil、Nil、NULL、NSNull的区别

nil.Nil.NULL.NSNull的区别 nil:指向一个对象的空指针 Nil:指向一个类的空指针 NULL:指向其他类型(如:基本类型.C类型)的空指针 NSNull:通常表示集合中的空值 举例: NSURL *url = nil; Class class = Nil; int *pointerInt = NULL; NSArray *array = [NSArray arrayWithObjects:[[NSObject alloc] init], [NSNull null], [[NS

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

iOS中nil,NULL,Nil,NSNull的区别

最近心情不太好,往往心情不太好的时候喜欢学点东西,写点东西,具体因为什么心情不太好在这里就不给大家爆料了哦! 言归正传: 1.nil定义一个实例为空, 指向oc中对象的空指针. 注意:当release一个对象的同时将该对象赋值为nil,这样确保安全性. 2.NULL在C语言中常用来表示一个空值. 注意:在Objective-C里,nil对象被设计来跟NULL空指针关联的.他们的区别就是nil是一个对象,而NULL只是一个值.而且我们对于nil调用方法,不会产生crash或者抛出异常. 3.Nil

iOS 中nil,Nil,NULL,NSNull的区别

类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据类型,它的变量就是对象. nil.Nil.NULL.NSNull的区别 nil:指向一个对象的空指针 Nil:指向一个类的空指针 NULL:指向其他类型(如:基本类型.C类型)的空指针 NSNull:通常表示集合中的空值 举例: NSURL *url = nil; Class class = Nil

关于nil和 null和NSNull的区别及相关问题

1.nil和null从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分配为assign NSString类型一般分配copy,而对象一般用retain.而且我们对于nil调用方法,不会产生crash或者抛出异常. 看一段 nil -> Null-pointer to objective- c object NIL -> Null-pointer to objective- c c