nil、Nil、NULL和NSNull的理解

来源:互联网 发布:淘宝抠图 编辑:程序博客网 时间:2024/06/07 00:03
给nil对象发送消息,是不会崩溃的,但是要么返回默认的0,要么返回nil对象。至于id类型的为什么返回0x0,而不是返回nil,我也是有些疑问的,nil和0x0的具体区别还有待研究。而如果给nunull对象发送消息,则会引起crash,猜测因为它没有任何方法,所以会抛出'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x10fd9a4c0'的异常。

一、nil

我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉;

或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,我称它为“空对象”。(注意:我这里强调的是“空对象”,下面我会拿它和“值为空的对象”作对比!!!)

所以对于这种空对象,所有关于retain的操作都会引起程序崩溃

二、NSNull

NSNull和nil的区别在于,nil是一个空对象,已经完全从内存中消失了,而如果我们想表达“我们需要有这样一个容器,但这个容器里什么也没有”的观念时,我们就用到NSNull,我称它为“值为空的对象”。如果你查阅开发文档你会发现NSNull这个类是继承NSObject,并且只有一个“+ (NSNull *) null;”类方法。这就说明NSNull对象拥有一个有效的内存地址,所以在程序中对它的任何引用都是不会导致程序崩溃的

三、Nil

nil和Nil在使用上是没有严格限定的,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然。只不过从编程人员的规约中我们约定俗成地将nil表示一个空对象,Nil表示一个空类

四、NULL

我们知道Object-C来源于C、支持于C,当然也有别于C。而NULL就是典型C语言的语法,它表示一个空指针

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 易网手游 好易网 法易网 易网车 知易网 易网公开课 易网互联 考易网 钱易网 猪易网今日猪价 易网车市 我的易网 易网影视 佛医易网 易网互动 易网学 易网棋牌 我的易网支付平台 易网云 厨易网 字易网 卜易网 水易网 酒易网 海易网 smt易网 花易网 中易网 中易网天 九易网 华易 www163 www.163 163网站 3g.163 www.163. 163油箱 易美 易美相机 易考吧 顾未易扮演者