前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS_OC判空:NULL、nil、Nil、NSNull

iOS_OC判空:NULL、nil、Nil、NSNull

作者头像
mikimo
发布2022-07-20 14:06:38
发布2022-07-20 14:06:38
93700
代码可运行
举报
文章被收录于专栏:iOS开发~iOS开发~
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
NULL = (void *)0         C指针的字面空值
nil = (id)0              OC对象的字面空值
Nil = (Class)0           OC类的字面空值
NSNull = [NSNull null]   空值的OC对象

具体如下: 

代码语言:javascript
代码运行次数:0
运行
复制
//1. NULL
//表示C的指针空值
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
代码语言:javascript
代码运行次数:0
运行
复制
// 2. nil
// 表示指向OC对象的指针为空
NSString *str = nil;
NSURL *url = nil;
id obj = nil;
if (obj == nil) {
  // todo ...
}
代码语言:javascript
代码运行次数:0
运行
复制
// 3. Nil
// 表示只想OC类 类型的指针为空
Class class = Nil;
Class class2 = [NSString class];
代码语言:javascript
代码运行次数:0
运行
复制
// 4. NSNull:一个OC对象,用于表示空值的类
// 只有一个单例方法:+ (NSNull *)null;
// 一般用于集合对象中保存一个空的占位对象: \
  因为Foundation集合对象中,nil通常被用于表示集合对象结束的标志,\
  因此无法用nil来存储一个空值,所以一般用[NSNull null]来存


// 例1:当 NSArray 里遇到 nil 时,就说明这个数组对象的元素截止了
#warning NSArray 只关注 nil 之前的对象,nil 之后的对象会被抛弃!!!
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil, @"three"]; // Missing sentinel in method dispatch
NSLog(@"%@", array);
// 结果如下
//  (
//      one,
//      two
//  )
 

// 例2:
// 错误的使用
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// [dict setObject:nil forKey:@"friends"];
// 报错:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: friends)'
 
// 正确的使用
[dict setObject:[NSNull null] forKey:@"friends"];

reference

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档