“空”园三兄弟之nil和Nil及NUL

说到空指针,大家立马想到的是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   

如此说来,大家一定对空指针家族有了很深的印象了吧,仅仅是自己查看资料总结的,希望大家能够提出建议,加以补充!!!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值