nil

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

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

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

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

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

Person *p1 = nil;

这个时候 如果通过p1指针去访问p1指针指向的对象的属性 这个时候会运行报错,而如果通过p1指针去调用对象的方法 运行不会报错,但是方法不会执行,没有任何反应。

NSNull

很多人可能没使用过这个类,我们先看看它的解释:

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

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

有打印结果:

0x1fbf7c340

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

Nil

Nil也就代表((void *)0)。nil和Nil在使用上是没有严格限定的,也就是说凡是使用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类似的含意。

nil、Nil、NULL和NSNull学习相关推荐

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

    nil.Nil.NULL和NSNull 文章目录 nil.Nil.NULL和NSNull nil NSNull Nil NULL 总结: 我们先来看看这几个苹果官方文档的解释: nil:Defines ...

  2. 关于nil和 null和NSNull的相关问题

    2019独角兽企业重金招聘Python工程师标准>>> 关于nil和 null和NSNull的区别及相关问题 1.nil和null从字面意思来理解比较简单,nil是一个对象,而NUL ...

  3. iOS——nil、Nil、NULL和[NSNull null]的区别

    iOS--nil.Nil.NULL和[NSNull null]的区别 首先我们先来看一下苹果文档上的解释: nil:Defines the id of a null instance.(定义空实例的i ...

  4. NIL、NIL、NULL和NSNULL区别

    前言 记得曾经有不少朋友问过笔者,在Objective-C中nil和Nil以及NULL的区别.最重要的是,在面试中还有不少朋友常会被问到.记得当年刚找工作的时候,笔者就被面试官问到过,现在笔者在这里统 ...

  5. ios nil、NULL和NSNull 的使用

    nil用来给对象赋值(Objective-C中的任何对象都属于id类型),NULL则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在Objective-C中类是一个对象,是类的met ...

  6. Objective C 中的nil,Nil,NULL和NSNull理解

    kenyo网友的原创说法是:做IOS开发的估计都对Objective-C的内存管理机制很头疼,一不小心程序就会出内存泄露,我也不例外,前几天被指针的置nil与release给搞惨了,今和大家详细解说一 ...

  7. IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull

    1.oc最好 用nil   [ nil  任意方法],不会崩溃  nil 是一个对象值. NULL是一个通用指针(泛型指针). 2. NSNULL,NULL和nil在本质上应该是一样的,NULL和ni ...

  8. nil/Nil/NULL/NSNull的来历

    学过C的同学都知道,C是用0来表示不存在的原始值.而NULL作为空指针,在指针环境中也相当于0值.其实NULL和0的值都是一样的.但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值 ...

  9. iOS开发 nil Nil NULL NSNull 的使用

    nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一个对象值. Nil: A null pointe ...

最新文章

  1. umi脚手架搭建的项目_15天零成本搭建静态博客,托管于Github Page
  2. CocoaPods (第三方资源管理框架)
  3. RecyclerView + SnapHelper实现炫酷ViewPager效果
  4. 华为交换机重置命令(reset saved-configuration)
  5. 在Linux 6上使用UDEV解决RAC ASM存储设备名问题
  6. Linux中的cp命令和mv命令
  7. swift5.x基础知识入门
  8. Express-start
  9. 自然语言处理技术在推荐系统中的应用和发展(附交流视频和PPT下载链接)
  10. 了解protected 以及公用、私有和受保护的继承
  11. C语言实现链栈的创建、入栈、出栈、取栈顶、遍历......等基本操作(小白版详解)
  12. 前端开发学习(七七)
  13. surface go 安装纯AndroidX86系统
  14. SAP PI/PO 视频,自己录制
  15. RegNet: Designing Network Design Spaces
  16. php访问小程序内容检测接口,关于小程序接入敏感词检测接口的坑
  17. Arthas 使用以及火焰图
  18. element ui textarea实现输入字数统计
  19. 洛谷P4766 [CERC2014]Outer space invaders题解
  20. 跟小丸子学基础口语11-15

热门文章

  1. matlab工具箱下载权限受限:您的管理员限制了您对此mathworks产品的下载权限
  2. iOS逆向小知识:批量部署插件(搭建私有Cydia源)
  3. laravel middleware
  4. 【网络安全之Web系列三】CentOS6.5基础
  5. Python *arg与**kwarg区别
  6. Promise浏览器兼容问题
  7. 阿伏法机器人_智慧树知道答案机器人制作与创客综合能力实训课后作业答案
  8. Teams桌面电话系列(1)——Yealink T58A
  9. 【学习笔记】bash -i命令
  10. 趣图:新手使用 C++ 指针时