nil、NULL和NSNull 的使用

一、区别

1. nil: 是一个对象值;

2. Null: 是一个通用指针(泛型指针);

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

    + (NSNull *)null;

总之:nil是用来给对象赋值(oc任何对象都属于id类型),NULL则给任何指针赋值,NULL不能与nil进行互换,nil用于类指针赋值(在oc中类是一个对象,是类的meta-class实例),而NSNull则用于集合操作,虽然他们表示的都是空值,但使用的场合完全不同,所以要求辨明之间的区别,用于适当的场合。

4. 实例

id object = nil; 
 
// 判断对象不为空  
if (object) { 
 
}  
      
// 判断对象为空  
if (object == nil) { 
 
}  
  数组初始化,空值结束
NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", nil];  
  判断数组元素是否为空
NSString *element = [array objectAtIndex:2];  
if ((NSNull *)element == [NSNull null]) {  

}  
void null1() {
    // NSNull null返回的是一个单例对象
    
    NSNull *nu = [NSNull null];
    NSNull *nu2 = [NSNull null];
    NSNull *nu3 = [NSNull null];
    
    NSLog(@"%i", nu == nu2);
    NSLog(@"%i", nu2 == nu3);
    
}
二、继续探究

1. nil: 一般赋值给空对象;

2. NULL: 一般赋值给nil以外的空对象,如SEL等;

3. NSNull: 只有一个方法,[NSNull null]用来在NSArray和NSDictionary中加入非nil(表示列表结束)的空值.   [NSNull null]是一个对象,他用在不能使用nil的场合;

4. 当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去;

    而向NSNull的对象发送消息时会收到异常,

这是因为NSArray 与 NSDictionary 中nil有特殊的含义(表示列表结束)。所以不能在集合中放入nil值。如果确实需要存储一个“表示什么都没有”的值,可以使用NSNull类。

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

6.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值