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

news/2024/7/20 21:59:05 标签: ios, 学习, xcode

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.niftyadmin.cn/n/392996.html

相关文章

基于SpringBoot+Mybatis+Mysql+vue校园二手交易市场

基于SpringBootMybatisMysqlvue校园二手交易市场 一、系统介绍1、系统主要功能:2、环境配置 二、功能展示1.主页(客户)2.登陆、注册(客户)3.我的购物车(客户)4.我的商品详情(客户)5.我的商铺(客户、商家)6.我的信息&am…

Hive on Spark环境搭建

Hive 引擎简介 Hive 引擎包括:默认 MR、tez、spark 最底层的引擎就是MR (Mapreduce)无需配置,Hive运行自带 Hive on Spark:Hive 既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行…

阿里云服务器开通全部端口流程

阿里云服务器端口怎么全部打开?在安全组中开启端口号,在安全组中把端口范围设置为-1/-1,授权对象填0.0.0.0/0,即可开通全部端口号,阿腾云来详细说下阿里云服务器端口全部打开教程: 阿里云服务器端口全部开…

Android Rust JNI系列教程(六) Rust 使用cms 实现Android签名验证

前言 在 Android 开发中,APK 的签名是一个非常重要的概念。签名用于验证 APK 的完整性和来源,以确保 APK 没有被篡改或恶意修改。在本文中,我们将介绍如何使用 Rust 和 cms crate(https://github.com/RustCrypto/formats/tree/master/cms) 来…

petalinux2022.2在ubantu20.04下的安装

1.Petalinux的下载路径 Downloads 这个是下载petalinux的官网路径。默认是2022.2版本,后期更新的均是以petalinux2022.2版本做的更新。 2.安装流程 在官网下载完成之后,会得到一个名为petalinux-v2022.2-10141622-installer.run的文件,这个文…

K8s in Action 阅读笔记——【9】Deployments: updating applications declaratively

K8s in Action 阅读笔记——【9】Deployments: updating applications declaratively 集群配置: 本章介绍如何更新运行在Kubernetes集群中的应用,以及Kubernetes如何帮助你实现真正的零停机更新过程。虽然这可以仅使用ReplicationControllers或ReplicaSe…

谷歌地图模型自动下载

本工具是收费软件,学生党勿扰,闹眼子党勿扰 本工具收费1000元 视频教程 1 概述 记得去年写过一篇关于谷歌地图模型提取的博客,得到了广泛好评。有很多同学提出,能不能自动下载谷歌地图模型,由于提出此需求的人太多了…

企业服务器金蝶用友财务软件感染.malox勒索病毒数据如何恢复?

勒索病毒是一种严重的网络安全威胁,它可以导致数据丢失和经济损失。91数据恢复研究院本文将将通过案例介绍、病毒特征介绍,入侵方式,预防方法等,为大家提供更深入的了解和应对勒索病毒的实用知识。 如果您在面对被勒索病毒攻击导…