nil、Nil、NULL与NSNull的区别

1.nil

指向一个对象的指针为空
在objc.h中的定义如下所示:
[objc]  view plain copy
  1. #ifndef nil  
  2. # if __has_feature(cxx_nullptr)  
  3. #   define nil nullptr  
  4. # else  
  5. #   define nil __DARWIN_NULL  
  6. # endif  
  7. #endif  
在Objective-C中用于id类型的对象
[objc]  view plain copy
  1. NSString *name = nil;  
  2. NSURL    *url  = nil;  
  3. id object      = nil;  

2.Nil

指向一个类的指针为空
定义如下:
[objc]  view plain copy
  1. #ifndef Nil  
  2. # if __has_feature(cxx_nullptr)  
  3. #   define Nil nullptr  
  4. # else  
  5. #   define Nil __DARWIN_NULL  
  6. # endif  
  7. #endif  
在Objective-C中用于Class类型的对象
[objc]  view plain copy
  1. Class aClass = Nil;  
  2. Clsss bClass = [NSURL class];  

3.NULL

指向C类型的指针为空
在stddef.h中定义如下:
[cpp]  view plain copy
  1. #if defined(__need_NULL)  
  2. #undef NULL  
  3. #ifdef __cplusplus  
  4. #  if !defined(__MINGW32__) && !defined(_MSC_VER)  
  5. #    define NULL __null  
  6. #  else  
  7. #    define NULL 0  
  8. #  endif  
  9. #else  
  10. #  define NULL ((void*)0)  
  11. #endif  
多用于如下例子:
[cpp]  view plain copy
  1. int   *pInt     = NULL;  
  2. char *chChar <span style="white-space:pre">   </span>= NULL;  
  3. struct stStruct = NULL;   

4.NSNull

在Objective-C中是一个类,只是名字中有个Null,NSNull有  + ( NSNull  *)null; 单例方法,多用于集合(NSArray,NSDictionary)中值为空的对象
[objc]  view plain copy
  1. NSArray *array = [NSArray arrayWithObjects:  
  2.                       [[NSObject alloc] init],  
  3.                       [NSNull null],  
  4.                       @"aaa",  
  5.                       nil,  
  6.                       [[NSObject alloc] init],  
  7.                       [[NSObject alloc] init], nil nil];  
  8.   
  9. NSLog(@"%ld", array.count); // 输出 3,NSArray以nil结尾  
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:  
  2.                                 @"Object0"@"Key0",  
  3.                                 @"Object1"@"Key1",  
  4.                                 nil,        @"Key-nil"  
  5.                                 @"Object2"@"Key2",  
  6.                                 nil nil];  
  7. NSLog(@"%@", dictionary); // 输出2个key-value,NSDictionary也是以nil结尾  
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];  
  2. [mutableDictionary setObject:nil forKey:@"Key-nil"]; // 会引起Crash  
  3. [mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不会引起Crash  
所以在使用时,如下方法是比较安全的
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. [mutableDictionary setObject:(nil == value ? [NSNull null] : value)  
  2.                       forKey:@"Key"];  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值