【iOS】—— nil、Nil、NULL和NSNull学习

news2024/11/24 3:52:44

nil、Nil、NULL和NSNull

文章目录

  • nil、Nil、NULL和NSNull
    • nil
    • NSNull
    • Nil
    • NULL
    • 总结:

我们先来看看这几个苹果官方文档的解释:

  • nil:Defines the id of a null instance.(定义空实例的id)
  • Nil:Defines the id of a null class.(定义空类的id)
  • NULL:Returns the singleton instance of NSNull.(返回NSNull的单例实例)
  • NSNull:A singleton object used to represent null values in collection objects that don’t allow nil values.(用于表示不允许空值的集合对象中的空值的单例对象)

我们来看看这四个的打印值:

        NSLog(@"%@", nil);
        NSLog(@"%@", Nil);
        NSLog(@"%@", NULL);
        NSLog(@"%@", [NSNull null]);

在这里插入图片描述

nil

我们使用nil表示Objective-C对象为空,如NSString *str = nilnil就代表((void *)0)

我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉;

或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,它为“空对象”。(注意:是“空对象”,不是“值为空的对象”

所以对于这种空对象,所有关于retain的操作都会引起程序崩溃。

如果一个类指针的值为nil 代表这个指针不指向任何对象。

NSNull

这是一个单例类,在不允许空对象的集合对象中使用,来代表空值。这说明NSNull对象拥有一个有效的内存地址,在程序中对它的任何引用都是不会导致程序崩溃的。
上面打印了它,打印它的地址看看:

NSLog(@"%p", [NSNull null]);

在这里插入图片描述
总结:NSNullnil的区别在于,nil是一个空对象,已经完全从内存中消失了,而如果想表达“我们需要有这样一个容器,但这个容器里什么也没有”的观念时,就要用到NSNull,它是“值为空的对象”。

Nil

Nil也就代表((void *)0)nilNil在使用上是没有严格限定的,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然。只不过从编程人员的规约中我们约定俗成地将nil表示一个空对象,Nil表示一个空类。

Class myClass = Nil;

NULL

在C语言中,NULL是无类型的,只是一个宏,它代表空。NULL其实就是在C/C++中的空指针。

总结:

NULLnilNil这三者对于Objective-C中值是一样的,都是(void *)0

  • NULL是宏,是对于C语言指针而使用的,表示空指针。
  • nil是宏,是对于Objective-C中的对象而使用的,表示对象为空。
  • Nil是宏,是对于Objective-C中的类而使用的,表示类指向空。
  • NSNull是类类型,是用于表示空的占位对象,与JS或者服务端的null类似的含意。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/606064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给编程初学者的一封信

提醒:以下内容仅做参考,具体请自行设计。 随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?欢迎大家积极讨论 一、自学编程需要注意什么? 要有足够的时间、精力等…

大数据治理入门系列:数据目录

在元数据管理一文中,我们曾将数据比喻为一本本的书,将书的作者、出版时间等信息比喻为元数据。试想一下,假如你是一名新任的图书管理员,如何快速掌握图书馆的馆藏情况呢?假如你是一名读者,如何快速找到你需…

Redis GEO功能详细介绍与实战

一、概述 Redis的Geo功能主要用于存储地理位置信息,并对其进行操作。该功能在Redis 3.2版本新增。Redis Geo操作方法包括: geoadd:添加地理位置的坐标;geopos:获取地理位置的坐标;geodist:计算…

第五届湖北省大学生程序设计竞赛(HBCPC 2023)vp赛后补题

Problem - B - Codeforces 思路: 数位dp,如果我们暴力的计算的状态的话,显然就是记录每个数字出现几次。但是显然这样难以发挥数位dp的记忆化功效,因为只有出现次数相同,你是什么数字,实际是无所谓的。所…

I2C学习笔记——I2C协议学习

1、I2C简介:一种简单、双线双向的同步串行总线,利用串行时钟线(SCL)和串行数据线(SDA)在连接总线的两个器件之间进行信息传递; 数据传输是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号。在总线空闲状态时&a…

【Linux C】基于树莓派/香橙派的蓝牙服务端——支持多蓝牙设备接入

一、需求 在树莓派/香橙派上利用开发板自带的蓝牙作为一个蓝牙服务端(主机),允许外来设备(从机)通过蓝牙接入进行通信,通信格式为透传方式;采用的编程语言为Linux C 二、环境准备 bluez安装 …

三波混频下的相位失配原理

原理推导 在四波混频情况下,实现零相位失配是一件很困难的事情。因为在四波混频中,相位调制和增益都依赖于相同的参数,即克尔非线性 γ \gamma γ。这个问题可以用嵌入在传输线上的辅助共振元件的复杂色散工程来部分解决。 但是在三波混频中…

ceph集群监控

文章目录 Ceph Dashboard启用dashboard插件dashboard启用ssl Promethues监控ceph启用prometheus模块配置prometheus采集数据grafana数据展示 Ceph Dashboard ceph-dashboard官方介绍:https://docs.ceph.com/en/latest/mgr/dashboard/ Ceph Dashboard是一个内置的c…

数据库系统概论---选择题刷题实训

(一)选择题 1.下列选项中,不属于关系模型三要素的是( C ) A.数据结构 B.数据操纵 C.数据安全 D.数据完整性规则 2.保证数据库…

【Spring】透过Spring源码查看Bean的命名转换规则

近期在写Spring项目的时候,需要通过注解的形式去替代之前直接将Bean存放在Spring容器这种方式,以此来简化对于Bean对象的操作,但是这样无法通过准确的Id去获取到相应的Bean对象了 测试观察 首先,如果要将指定的对象存放到Spring中…

SQL注入基础知识

文章目录 一、注入的分类1.基于服务器收到的响应2.基于处理输入的SQL查询(数据类型)3.基于程度和顺序的注入(哪里受了影响)4、基于注入点位置 二、系统函数1.字符串连接函数2.一般用于尝试的语句3.union操作符的介绍 总结 一、注入…

caught (in promise) RangeError: Maximum call stack size exceeded-vue前置导航守卫死循环

报错图 产生场景 1.近期在搭建移动端的架子时,在写路由守卫时,发现陷入死循环,报错意思是循环超出栈。。 2.后面排查了一圈问题之后,发现这个问题很小,但很难发现,在此记录。 3.vue 路由的导航守卫并不是…

类和对象【4】static成员、const对象、友元

全文目录 引言static成员static成员变量static成员函数 const对象友元友元函数友元类 总结 引言 通过前面的三篇文章,相信大家对类和对象已经有了一个基本的认识。 类和对象1(初识) 类和对象2(默认成员函数) 类和对象…

数据结构与算法11:堆

目录 【堆】 堆中插入和删除元素 堆排序 【堆的常见应用】 应用1:优先级队列 (1)合并有序小文件 (2)定时器功能 应用2:计算排行榜中前K个数据 应用3:求中位数 应用4:计算…

算法基础--MD5算法介绍

1、简介 MD5再开发过程中经常碰到的一种算法,因此感觉有必要对其原理进行更深入的了解一下。 2、算法概念 散列函数,也称作哈希函数,消息摘要函数,单向函数或者杂凑函数。散列函数主要用于验证数据的完整性。通过散列函数&#x…

自然语言处理从入门到应用——自然语言处理的应用任务

分类目录:《自然语言处理从入门到应用》总目录 本文介绍信息抽取、情感分析、问答系统、机器翻译和对话系统等自然语言处理应用任务。这些任务可以直接或间接地以产品的形式为终端用户提供服务,是自然语言处理研究应用落地的主要技术。 信息抽取 信息抽…

天气预报信息获取程序--GUI--可以使用

上次正对项目中需要填写项目日志,制作了一个命令行版本的下载天气信息的程序,满足日常需要,调整一下界面版本的程序 如果大家使用命令行的可以使用下面的版本(连接) https://ht666666.blog.csdn.net/article/details…

逻辑漏洞学习-知识点总结

逻辑漏洞就是程序在实现业务逻辑上存在的错误,辑漏洞的出现通常是因为程序在设计业务逻辑时考虑不够全面,或者程序员的思维过程存在瑕疵,没有充分考虑到各种可能的情况 大部分程序员在设计的时候,目标是实现功能需求,…

Linux基础知识点 有这篇就足够了!!

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 目录 一、 从认识操作系统开始 1.1 操作系统简介 1.2 操作系统…

chatgpt赋能Python-python分表

介绍 Python是一种流行的编程语言,适用于各种应用程序开发,包括网络应用程序、数据库应用程序以及数据分析和科学计算。Python分表是基于Python编写的分表工具,可以帮助开发人员更轻松地管理大型数据库表格。 Python分表是如何工作的&#…