nil、Nil、NULL和NSNull

文章目录

  • nil、Nil、NULL和NSNull
    • nil
    • NSNull
    • Nil
    • NULL
    • 总结:

我们先来看看这几个苹果官方文档的解释:

  • nil:Defines the id of a null instance.(定义空实例的id)
  • Nil:Defines the id of a null class.(定义空类的id)
  • NULL:Returns the singleton instance of NSNull.(返回NSNull的单例实例)
  • NSNull:A singleton object used to represent null values in collection objects that don’t allow nil values.(用于表示不允许空值的集合对象中的空值的单例对象)

我们来看看这四个的打印值:

        NSLog(@"%@", nil);NSLog(@"%@", Nil);NSLog(@"%@", NULL);NSLog(@"%@", [NSNull null]);

nil

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

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

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

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

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

NSNull

这是一个单例类,在不允许空对象的集合对象中使用,来代表空值。这说明NSNull对象拥有一个有效的内存地址,在程序中对它的任何引用都是不会导致程序崩溃的。
上面打印了它,打印它的地址看看:

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


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

Nil

Nil也就代表((void *)0)nilNil在使用上是没有严格限定的,也就是说凡是使用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类似的含意。

【iOS】—— nil、Nil、NULL和NSNull学习相关推荐

  1. nil、Nil、NULL和NSNull学习

    nil 我们使用nil表示Objective-C对象为空,如NSString *str = nil.nil就代表((void *)0) 我们给对象赋值时一般会使用object = nil,表示我想把这 ...

  2. iOS——nil、Nil、NULL和[NSNull null]的区别

    iOS--nil.Nil.NULL和[NSNull null]的区别 首先我们先来看一下苹果文档上的解释: nil:Defines the id of a null instance.(定义空实例的i ...

  3. 关于nil和 null和NSNull的相关问题

    2019独角兽企业重金招聘Python工程师标准>>> 关于nil和 null和NSNull的区别及相关问题 1.nil和null从字面意思来理解比较简单,nil是一个对象,而NUL ...

  4. ios nil、NULL和NSNull 的使用

    nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的met ...

  5. Objective C 中的nil,Nil,NULL和NSNull理解

    kenyo网友的原创说法是:做IOS开发的估计都对Objective-C的内存管理机制很头疼,一不小心程序就会出内存泄露,我也不例外,前几天被指针的置nil与release给搞惨了,今和大家详细解说一 ...

  6. NIL、NIL、NULL和NSNULL区别

    前言 记得曾经有不少朋友问过笔者,在Objective-C中nil和Nil以及NULL的区别.最重要的是,在面试中还有不少朋友常会被问到.记得当年刚找工作的时候,笔者就被面试官问到过,现在笔者在这里统 ...

  7. IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull

    1.oc最好 用nil   [ nil  任意方法],不会崩溃  nil 是一个对象值. NULL是一个通用指针(泛型指针). 2. NSNULL,NULL和nil在本质上应该是一样的,NULL和ni ...

  8. iOS开发 nil Nil NULL NSNull 的使用

    nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值. Nil: A null pointe ...

  9. IOS中类和对象还有,nil/Nil/NULL的区别

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101akm1.html 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性 ...

最新文章

  1. SAP QM 物料主数据检验类型上的Skips allowed
  2. Java并发包之闭锁/栅栏/信号量(转)
  3. 点滴积累【C#】---初始页面自动给站点名称赋值
  4. 怎么把自己建的墙拆掉_新房阳台栏杆要不要拆掉?后悔我家装修太早!
  5. Spring Boot 2 + Redis 对象缓存
  6. CSDN挑战编程——《绝对值最小》
  7. torch.stack作用分析
  8. java 对象与二进制互转
  9. 飞秋mac版字符乱码_Mac必装软件推荐,下载方法也给你了。
  10. wcf 双向 java_我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...
  11. 在Simulink中对S 函数进行参数传递的三种方法
  12. Spotfire 常用数据类型
  13. 坐标拾取器功能实现demo
  14. Servlet过滤器
  15. 【RK2206】4. MQTT示例
  16. 浪潮之巅--摩托罗拉
  17. uniapp 引入外部链接js
  18. PgSQl 结合 Mybatis 插入 json,及查询,数据库使用 jsonb
  19. 情人节情侣表空间白网页源码 html 简单易改 祝福你们幸福安康、地久天长!
  20. ROS2学习笔记22--使用launch启动/监听多个node节点

热门文章

  1. 【精彩回顾】第五届中国大数据应用论坛隆重举行
  2. 华为鸿蒙授权权限,封闭系统或限制国产app权限?周鸿祎:华为鸿蒙必须开源
  3. 在VS2013环境下MFC学习:给对话框添加背景图片
  4. 江苏理工大学计算机专业怎么样,江苏理工学院是几本?有哪些王牌专业?
  5. 2022安徽安全员C考试单选题库预测分享
  6. 网格化管理解决方案_响应表问题的网格解决方案
  7. 海康2018C++面试
  8. ASP.NET WebApi简单实例
  9. EXCEL查看重复行数据
  10. Nvidia A100 硬件软件结构分析