文档章节

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

a
 advancer_chen
发布于 2017/07/05 15:00
字数 433
阅读 24
收藏 0
点赞 0
评论 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
粉丝 16
博文 17
码字总数 17262
作品 0
朝阳
高级程序员
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
nil,NULL,NSNull的区别

nil,NULL,NSNull的区别 主要就以下几点: 1、nil:一般赋值给空对象; 2、NULL:一般赋值给nil之外的其他空值。如SEL等;   举个栗子(好重啊~):     [NSApp beginSheet:sheet    ...

Daniel_s
2015/12/25
25
0
iOS 开发 nil/Nil/NULL/NSNull的区别

C用0来作为不存在的原始值,而NULL作为指针(这在指针环境中相当于0)。 Objective-C在C的表达不存在的基础上增加了nil。nil是一个指向不存在的对象指针。虽然它在语义上与NULL不同,但它们在技...

神补刀
2015/11/12
0
0
iOS nil、Nil、NULL和NSNull 的使用

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

江山风雨
07/04
0
0
ios nil、NULL和NSNull 的使用

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

Align
2016/01/04
13
0
​Object-C nil NULL 和 NSNull

nil 用来给对象赋值 NULL 则给任何指针赋值 //NULL 和 nil 不能互换,nil 用于类指针赋值 NSNull 则用于集合操作 一般情况下最好使用用 nil (空对象值,有意义) [ nil 任意方法],不会导致崩溃...

Jack088
2015/09/18
72
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
15分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
12
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
203
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部