ios中nil、Nil、Null、[NSNull null]区别和联系

nil 就是空对象。把一个对象置成nil之后,就不能对其进行retain, copy等引用计数相关的操作了

在iOS中,Nil完全等同于nil。

NUll就是C语言中的一个空指针,在Objective-C中也可以使用。

[NSNull null]是值为空的对象,nil是一个空对象,已经完全从内存中消失了,而如果我们想表达“我们需要有这样一个对象,但这个对象里什么也没有”的观念时,就需要[NSNull null]这个对象了。

oc中数组、字典等对象中插入nil会crash,但是我们可以插入值为空的对象[NSNull null].

接下来我们看看nil、Nil、Null 是不是等价的呢?

   if (nil == Nil) {
        NSLog(@"nil == Nil");
    }
    
    if (nil == NULL){
        NSLog(@"nil == NULL");
    }
    
    if (NULL == Nil){
        NSLog(@"NULL == Nil");
    }
    
    if (nil == [NSNull null]){
        NSLog(@"nil == NSNULL");
    } else{
        NSLog(@"nil != [NSNull null]");
    }
2019-08-23 11:10:39.583056+0800 canmera[5329:2318760] nil == Nil
2019-08-23 11:10:39.583079+0800 canmera[5329:2318760] nil == NULL
2019-08-23 11:10:39.583086+0800 canmera[5329:2318760] NULL == Nil
2019-08-23 11:10:39.583091+0800 canmera[5329:2318760] nil != [NSNull null]

可以看出 nil == Nil == Null 所以它们在object-c中是可以通用的。都表示空对象的意思。

[NSNull null]是值为空的对象,和nil、Nil、Null是不等价的。

最后再解释一下,空对象和值为空的对象的区别:
“空对象”是已经释放了内存地址的对象,即不存在的对象。
“值为空的对象”是分配了地址,但是没有值得对象,是实际存在的对象。

你可能感兴趣的:(ios中nil、Nil、Null、[NSNull null]区别和联系)