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

Nil: A null pointer to an Objective-C class.

NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NULL是一个通用指针(泛型指针)。

NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values). [NSNull null]: The singleton instance of NSNull.

[NSNull null]是一个对象,他用在不能使用nil的场合。

因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:+ (NSNull *) null;

nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,Nil用于类指针赋值(在Objective-C中类是一个对象,是类的meta-class的实例), 而NSNull则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。

  id object = nil;  // 判断对象不为空  if (object)
{
//对object进行操作}  // 判断对象为空  if (object == nil)
{  }  // 数组初始化,空值结束
NSArray *array = [[NSArray alloc] initWithObjects:@"A", @"B", nil];  // 判断数组元素是否为空  NSString *element = [array objectAtIndex:2];  if ((NSNull *)element == [NSNull null])
{  }
复制代码

要判断数组元素是否为空,以下写法都无效

if(!element)if([element length]>0)if(element== NULL)if(element == Nil)
复制代码

判断字典对象的元素是否为空

 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:  @"A", @"A", @"B", @"B", nil];  NSString *value = [dictionary objectForKey:@"A"];  if ((NSNull *)value == [NSNull null]) {    }
复制代码

总结:

1、nil:一般赋值给空对象; 2、NULL:一般赋值给nil之外的其他空值。如SEL等; 3、NSNULL:NSNull只有一个方法:+ (NSNull *) null;   [NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值. [NSNull null]是一个对象,用在不能使用nil的场合。 4、当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去;   而向NSNull的对象发送消息时会收到异常。 因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法:+ (NSNull *) null;

nil是一个对象指针为空, Nil是一个类指针为空, NULL是基本数据类型为空

从技术实现上来说,nil、NULL都是一样的。但是实际上这种定义能够增加代码的可读性。如果你给某人传递NULL值,那么某人就认为接收到的是C指针。如果是nil,那么认为接受的是一个对象。而Nil,则认为接受的是class。 那么NSNull与nil之间的区别有哪些呢? 如何一个对象obj是nil,那么调用[obj message]将不会扔出NSException异常,并且会正常返回NO; 如果一个对象obj为NSNull,那么[obj message]将会扔出NSException异常。 oc有个特性,当发消息给nil对象时,系统返回0值而不是引起异常,这和JAVA烦人的NullPointerException以及C/C++的程序直接崩溃的处理完全不一样,这个挺有用的。

iOS开发 nil Nil NULL NSNull 的使用相关推荐

  1. 【iOS开发】—— nil、Nil、NSNull和NULL

    文章目录 nil Nil NULL NSNull 分析 nil nil是用来表示一个对象是空对象,即想要表示此对象不存在.给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉:或者 ...

  2. iOS开发-NULL和nullptr和nil和Nil还有NSNull

    2019独角兽企业重金招聘Python工程师标准>>> NULL和nullptr 在Clang 6.0 的stddef.h文件中可以找到NULL和nullptr的声明: 1 2 3 ...

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

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

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

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

  5. ios nil、NULL和NSNull 的使用

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

  6. 【iOS】—— nil、Nil、NULL和NSNull学习

    nil.Nil.NULL和NSNull 文章目录 nil.Nil.NULL和NSNull nil NSNull Nil NULL 总结: 我们先来看看这几个苹果官方文档的解释: nil:Defines ...

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

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

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

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

  9. (0047)iOS开发之nil/Nil/NULL的区别

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

最新文章

  1. 设备租赁系统源码_滑雪场一卡通管理系统,设备租赁更简便
  2. php 写入文件 格式,在使用php写入文件时如何保证用户的单一
  3. ASP.NET MVC 上传大文件时404
  4. lamp mysql位置_linux查看 LAMP环境安装路径
  5. 83)PHP,配置文件功能
  6. 6款令人相见恨晚的在线搜索网站,成年后都会要用上,了解一下!
  7. 工业3D互联网可视化三维数字化智能工厂管理系统
  8. C++ SHFileOperation实现文件、文件夹拷贝、删除、重命名
  9. matlab 三维 作图 坐标轴_这张图(不全),想利用matlab画一张三维图,X Y z 轴分别为经度 纬度 频率,这...
  10. 地图 显示 动态轨迹_腾讯地图SDK全新版本上线,可满足开发者核心诉求
  11. 解决vmware下虚拟机关机重启ip改变
  12. AC-DMIS 5.3自动测量平面(自定义触测点、批量测量)
  13. SAP资产折旧-工作量法业务实践和实操
  14. Ubuntu synaptic install
  15. Java 【求一个整数是否为2的倍数】
  16. Ubuntu 安装Jdk1.8
  17. 在ORANGES的基础上改进操作系统
  18. asp.net1042-多媒体图书交易平台#毕业设计
  19. 利用Python+Cocos2d制作《猫吃老鼠》小游戏
  20. 计算机毕业设计Springboot+vue的宠物销售商城网站(源码+系统+mysql数据库+Lw文档)

热门文章

  1. 屏蔽微软的SignalR
  2. 升级 Java 编程规范的6个约定
  3. setInterval 与 clearInterval详解
  4. mysql查看存储过程工作记录20130711
  5. 自己收集的一些技术blog-javascript
  6. Visual Basic 2005 - 如何将色彩字符串转换成 Color 结构
  7. ASP.NET Core 2 学习笔记(四)依赖注入
  8. 基于Kubernetes构建现代大数据管道
  9. Hibernate查询语言(HQL)
  10. 1-4月份我国软件业务收入15753亿元 同比增长13.1%