nil|nil NSNull NULL
C用0来作为不存在的原始值,而NULL作为指针(这在指针环境中相当于0)。
Objective-C在C的表达不存在的基础上增加了nil。nil是一个指向不存在的对象指针。虽然它在语义上与NULL不同,但它们在技术上是相等的。
在框架层面,Foundation定义了NSNull,即一个类方法+null,它返回一个单独的NSNull对象。NSNull与nil以及NULL不同,因为它是一个实际的对象,而不是一个零值。
也许nil最显著的行为是,它虽然为零,仍然可以有消息发送给它。
在其他的语言中,比如C++,这样做会使你的程序崩溃,但在Objective-C中,在nil上调用方法返回一个零值。这大大的简化了表达,因为它避免了在使用nil之前对它的检查
// 举个例子,这个表达...
if(name!=nil&&[nameisEqualToString:@"Steve"]){...}
// …可以被简化为:
if([nameisEqualToString:@"steve"]){...}
SNull在Foundation和其它框架中被广泛的使用,以解决如NSArray和NSDictionary之类的集合不能有nil值的缺陷。你可以将NSNull理解为有效的将NULL或者nil值封装boxing,以达到在集合中使用它们的目的:
NSMutableDictionary*Dict=[NSMutableDictionary dictionary];
Dict[@"someKey"]=[NSNullnull];
// Sets value of NSNull singleton for`someKey`
【nil|nil NSNull NULL】NSLog(@"Keys: %@",[mutableDictionaryallKeys]);
// @[@"someKey"]
推荐阅读
- Java中有关Null的9件事
- The|The getter 'data' was called on null , Receiver: null, Tried calling
- Unable|Unable to add window -- token null is not valid; is your activity running?
- 面试突击19(为什么ConcurrentHashMap不允许插入null值())
- 为什么我不建议你用去 “ ! = null " 做判空()
- dart系列之:和null说再见,null使用最佳实践
- 谈谈|谈谈 JavaScript 中的空值合并操作符 Nullish coalescing operator
- 【JavaScript Weekly #523】Null VS Undefinded
- SpringBoot报错(文档根元素 "mapper" 必须匹配 DOCTYPE 根 "null"。)
- java之foreach,你判null了吗()