文档章节

[基础]OC中的nil, NSNull, NULL 与 Nil

a
 advancer_chen
发布于 2017/07/05 15:00
字数 433
阅读 34
收藏 0

所有文章目录:http://my.oschina.net/ChenTF/blog/677112

本篇文章地址: https://my.oschina.net/ChenTF/blog/1162665

如果对您有帮助还请 "赞" 一下哈, 有问题可留言或加QQ群:323276186

OC中的经常使用nil, NSNUll, 你对这些理解正确吗?

题目: 以下各个表达式的结果是 YES or NO ?

NSNull *null = [NSNull null];
NSString *str = nil;

if (!null)
if (null == nil)
if ([null isKindOfClass:[NSNull class]])


if (!str)
if ([str isKindofClass:[NSNull class]])
if ([str isKindofClass:[NSString class]])

if(nil == 0)
if(null == 0)
if(nil == NULL)

答案:

 NilStudy[29401:12682571] ========================================
 NilStudy[29401:12682571] =                NSNull                =
 NilStudy[29401:12682571] |    NSNull *null = [NSNull null];    |
 NilStudy[29401:12682571] if (null) ==> YES        // null是对象
 NilStudy[29401:12682571] if (!null) ==> NO
 NilStudy[29401:12682571] if (null == nil) ==> NO
 NilStudy[29401:12682571] if (null != nil) ==> YES
 NilStudy[29401:12682571] if ([null isKindOfClass:[NSNull class]]) ==> YES
 NilStudy[29401:12682571] if ([null isEqual:[NSNull class]]) ==> NO    //class是类, null是对象
 NilStudy[29401:12682571] if ([null isEqual:[NSNull null]]) ==> YES
 NilStudy[29401:12682571] ========================================
 NilStudy[29401:12682571] ========================================
 NilStudy[29401:12682571] =                  nil                 =
 NilStudy[29401:12682571] |         NSString *str = nil;         |
 NilStudy[29401:12682571] if (str) ==> NO        
 NilStudy[29401:12682571] if (!str) ==> YES        // nil为0,则!0为YES
 NilStudy[29401:12682571] if (str == nil) ==> YES
 NilStudy[29401:12682571] if (str != nil) ==> NO
 NilStudy[29401:12682571] if ([str isKindOfClass:[NSNull class]]) ==> NO  //nil与NSNull没关系
 NilStudy[29401:12682571] if ([str isKindOfClass:[NSString class]]) ==> YES //类型不变
 NilStudy[29401:12682571] ========================================
 NilStudy[29401:12682571] ========================================
 NilStudy[29401:12682571] =                值类型                =
 NilStudy[29401:12682571] if (0) ==> NO
 NilStudy[29401:12682571] if (3) ==> YES    // 非0即真
 NilStudy[29401:12682571] if (nil == 0)  ==> YES
 NilStudy[29401:12682571] if (null == 0)   ==> NO    // NSNull为对象
 NilStudy[29401:12682571] if (nil == NULL) ==> YES   // NULL为C中的空指针

结论:

  • NSNull是类;
  • null是对象;
  • nil是空指针;
  • NULL是C中的空指针
  • Nil 对应的Class类型的空标示

定义:

Nil:
#ifndef Nil
# if __has_feature(cxx_nullptr)
#   define Nil nullptr
# else
#   define Nil __DARWIN_NULL
# endif
#endif

nil:
#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif

NSNull:
@interface NSNull : NSObject <NSCopying, NSSecureCoding>
+ (NSNull *)null;
@end

更多参考: http://www.cnblogs.com/baozou/p/3304096.html

DEMO点这

© 著作权归作者所有

共有 人打赏支持
a
粉丝 17
博文 19
码字总数 19578
作品 0
朝阳
iOS工程师
私信 提问
iOS中的(null) nil 问题

前段时间开发过程中,界面上莫名其妙的有些地方显示(null)有些地方显示 <null>,修改起来很蛋疼,经过查找资料来总结一下其中的微妙,免得以后再在这个东西上花无谓的时间去修改。 首先记录...

Marginx
2015/10/06
1K
0
nil、Nil、NULL的区别

nil、Nil、NULL的区别 nil :指向oc中对象的空指针, 针对对象 。 Nil :指向oc中类的空指针, 针对类 。 NULL :指向其他类型的空指针,如一个c类型的内存指针, 基本数据类型为空,基本类型...

法斗斗
2016/02/18
22
0
Objective-C 中 NULL、nil、Nil、NSNull

NULL NULL 定义在 usr/include/sys/types/null.h 文件里: #ifndef NULL #define NULL DARWIN_NULL #endif / NULL / 其中 DARWINNULL 的定义在 usr/include/sys/_types.h 文件里,如下: #i......

tb_engineer
2016/12/20
1
0
nil / Nil / NULL / NSNull

nil:指向oc中对象的空指针 Nil:指向oc中类的空指针 NULL:指向其他类型的空指针,如一个c类型的内存指针 NSNull:在集合对象中,表示空值的对象 nil和NULL从字面意思来理解比较简单,nil是...

TaciturnKnightYQ
2015/12/01
18
0
iOS中nil、NSNULL、Nil

一、起因 参与一个比较成熟的项目的开发,刚好项目新功能上线。结果上线4天奔溃2千个,我看了下倒吸一口凉气。当时,最后排查出来是很简单的原因新用户注册时H5返回给iOS壳中<NULL>类型数据的...

gitzhengjianhua
2016/11/15
12
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在React工程中使用JavaScript Barcode SDK创建Web条形码应用

基于WebAssembly构建的Dynamsoft JavaScript Barcode SDK让Web开发者能够创建适用于浏览器的高性能条码应用。这篇文章分享下如何使用React快速创建一个简单的Web条形码扫描应用。 下载 Node...

yushulx
33分钟前
1
0
java lambda笔记

c#中的lambda表达式简直不要太爽,但是感觉java的lambda和c#比有待继续提高。 先搞个筛选List集合的东西,我们先搞个集合玩玩。 List<Person> person = new ArrayList<Person>();Person p...

朝如青丝暮成雪
33分钟前
1
0
最严新规发布 网络短视频平台该如何降低违规风险?

1月9日中国网络视听节目服务协会对外正式发布了多项规范,对版权视频保护及违规内容,都进行了更加详细的标准制定,整体政策更加严格。 规范规定,网络短视频平台应当履行版权保护责任,不得...

阿里云官方博客
42分钟前
1
0
深入解读阿里云数据库POLARDB核心功能物理复制技术

日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性、稳定性和性能都非常重要。 可靠性方面,在有一个数据文件的基础全量备份后,...

zhaowei121
48分钟前
1
0
CentOS 非root 用户 使用sudo 命令免密码

1. 使用su/su - 命令进入root权限下; 2. 给/etc/sudoers文件添加写权限 chmod u+w /etc/sudoers 3.找到“root ALL=(ALL) ALL ”,在后面添加:"dba ALL=(ALL) NOPASSWD: ALL" 4.保存退出,并......

驛路梨花醉美
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部