【概述】
以前,对于他们的区别都是死记硬背的,这次写程序,遇了一个坑,后台返回一个字典里的字段
zjjb = "<null>”
然后我这样取:
[[dict objectforkey:@"zjjb”] length]
结果报错:
CRASH: -[NSNull length]: unrecognized selector sent to instance
巨坑!后来找到了解决办法,就准备来总结下他们几个之间的差别
【差别总结】
概念
- nil:指向一个对象的空指针
- Nil:指向一个类的空指针
- NULL:指向其他类型(如:基本类型、C类型)的空指针
- NSNull:通常表示集合中的空值
使用举例:
NSString * string= nil;
Class class = Nil;
int *pointerInt = NULL;
[[dict objectforkey:@"zjjb”] isEqualto: [NSNull null]]
补充:
1.为什么上面的array里面的空对象不直接用nil?
[NSNull null]通常可以作为一个数组的占位符,从而是数组的count计算准确
2.为什么需要 NSNULL?
对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null]返回的对象来初始化NSArray中的内容
3.NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其实就是0
</br>
——————————— 【 MadeBy 纪宝宝 】 ———————————