IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [iOS]-nil、NULL、和NSNull的区别和使用 -> 正文阅读

[移动开发][iOS]-nil、NULL、和NSNull的区别和使用

基本概念

nil用来给对象赋值(OC中的扔和对象都属于id类型)
NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在OC中类是一个对象,是类的meta-class的实例)
NSNull则用于集合操作,它们虽然表示的都是空值,但使用的场合完全不同。

使用案例

id object = nil;
//判断对象不为空
if (object) {
	
}

//判断对象为空
if (object == nil) {
	
}

//数组初始化,空值结束
NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", @"Third", nil];

//判断数组元素是否为空
//注意下方取数组元素的下标的值不能越界,例如该例中的数组array的有效元素只有3个,所以element能取到的下标只有0~2,若取其他值程序就会崩溃
NSNull *element = [array objectAtIndex:2];
if (element == [NSNull null]) {
	NSLog(@"该元素为空!");
}

判断字典对象的元素是否为空:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"iPhone", @"First", @"iPad", @"Second", nil];

NSNull *value = [dictionary objectForKey:@"First"];
if (value == [NSNull null]) {
	NSLog(@"该元素为空!");
}

总结:
nil:一般赋值给空对象
NULL:一般赋值给nil以外的其他空值,如SEL等
NSNull:NSNull中只有一个方法:+(NSNull *) null; [NSNull null]是一个单例对象,它用在不能使用nil的场合
使用场合:
当向nil发送消息时,返回NO,不会有异常,程序将继续执行下去,而向NSNull的对象发送消息时会收到异常。
如下:

NSArray *array = [[NSArray alloc] initWithObjects:@"123", [NSNull null], @"Second", nil];

NSArray *arrayFirst = [[NSArray alloc] initWithArray:array];
/*
下方输出:
(
    123,
    "<null>",
    Second
)
*/
NSLog(@"%@", arrayFirst);
    
NSArray *arraySecond = nil;
arraySecond = [arraySecond initWithArray:array];
//下方输出:(null)
NSLog(@"%@", arraySecond);
//而将nil改为[NSNull null]的话则程序会崩溃

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

//数组初始化,空值结束
NSArray *array = [[NSArray alloc] initWithObjects:@"123", [NSNull null], @"Second", nil];
//array[1]是[NSNull null]
//程序输出"<null>",正常运行而不会崩溃
NSLog(@"%@", array[1]);

//array[3]是nil
//程序会崩溃
NSLog(@"%@", array[3]);

小结:
从字面意思来理解,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的
就像下方的描述:

nil -> Null-pointer to objective- c object

NIL -> Null-pointer to objective- c class

null-> null pointer to primitive type or absence of data

具体的用法:

看一下用法
NSURL *url = nil;

Class  class = Nil;

int *pointerInt = NULL;

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空,这些可以理解为nil,Nil,NULL的区别
本博客学习自:大佬博客

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:54:07  更:2022-04-18 17:54:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:26:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码