说到空指针,大家立马想到的是nil,其实OC大家族中的三个成员nil,Nil还有NULL,都是空指针,即没有指向任何东西的指针,给空指针发送消息也不会报错!
下面就说说关于nil和Nil及NULL的区别:
nil: A null pointer to an Objective-C object. nil 是一个OC对象值。
//nil的定义
#define nil __DARWIN_NULL
#define __DARWIN_NULL ((void *)0)
//nil怎么用
Person *p = [Person new];
p = nil;
Nil: A null pointer to an Objective-C class.给类对象赋值
//Nil的定义
#define Nil __DARWIN_NULL
#define __DARWIN_NULL ((void *)0)
//Nil怎么用
Class someClass = Nil;
NULL: A null pointer to anything else, is for C-style memory pointers. 用于对非对象指针赋空值,比如C指针
//NULL的定义
#define NULL ((void*)0)
//NULL的用法
char *ptr = NULL;
int* p = NULL;
struct S *s = NULL;
通过查看定义我们发现,nil,Nil,NULL其实并没有什么本质上的不同,只是OC种用不同的形式来表示他们应该用在不用的地方,但是其实他们可以通用,你给一个OC对象或者类对象或者C语言指针赋值为NIL,nil,NULL都是不会报错的。
NSNull: The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).
//NSNULL的定义
@interface NSNull : NSObject <NSCopying, NSSecureCoding>
+ (NSNull *)null;
@end
//NSNULL的使用
[NSNull null]; //返回一个单例的NSNULL对象
//他返回的对象用在比如像NSArray这样的类型中,nil或NULL不能做为加到其中的Object
//如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null]返回的对象来初始化NS
如此说来,大家一定对空指针家族有了很深的印象了吧,仅仅是自己查看资料总结的,希望大家能够提出建议,加以补充!!!