nil、Nil、NULL和NSNull学习

nil、Nil、NULL和NSNull学习nil我们使用nil表示Objective-C对象为空,如NSString*str=nil。nil就代表((void*)0)我们给对象赋值时一般会使用object=nil,表示我想把这个对象释放掉;或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,它为“空对象”。(注意:是“空对象”,不是“值为空的对象”)所以对于这种空对象,所有关于retain的操作都会引起程序崩溃。如果一个类指针的值为nil代表这个指针不指向任

大家好,欢迎来到IT知识分享网。

nil

我们使用nil表示Objective-C对象为空,如NSString *str = nilnil就代表((void *)0)

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

或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,它为“空对象”。(注意:是“空对象”,不是“值为空的对象”

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

如果一个类指针的值为nil 代表这个指针不指向任何对象。

Person *p1 = nil;

这个时候 如果通过p1指针去访问p1指针指向的对象的属性 这个时候会运行报错,而如果通过p1指针去调用对象的方法 运行不会报错,但是方法不会执行,没有任何反应。

NSNull

很多人可能没使用过这个类,我们先看看它的解释:
在这里插入图片描述
这是一个单例类,在不允许空对象的集合对象中使用,来代表空值。这说明NSNull对象拥有一个有效的内存地址,在程序中对它的任何引用都是不会导致程序崩溃的。
我们试一下:

NSNull *nullObject = [NSNull null];
NSLog(@"%p", nullObject);

有打印结果:

0x1fbf7c340

总结:NSNullnil的区别在于,nil是一个空对象,已经完全从内存中消失了,而如果想表达“我们需要有这样一个容器,但这个容器里什么也没有”的观念时,就要用到NSNull,它是“值为空的对象”。

Nil

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

Class myClass = Nil;

NULL

在C语言中,NULL是无类型的,只是一个宏,它代表空。NULL其实就是在C/C++中的空指针。

总结:

NULLnilNil这三者对于Objective-C中值是一样的,都是(void *)0

  • NULL是宏,是对于C语言指针而使用的,表示空指针。
  • nil是宏,是对于Objective-C中的对象而使用的,表示对象为空。
  • Nil是宏,是对于Objective-C中的类而使用的,表示类指向空。
  • NSNull是类类型,是用于表示空的占位对象,与JS或者服务端的null类似的含意。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15316.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信