iOS中nil/Nil/NULL/NSNull的区别
来源:互联网 发布:黑色沙漠男忍捏脸数据 编辑:程序博客网 时间:2024/06/08 06:13
5,nil和Nil和NULL的判断
开发过程中,我们通过http请求,后台返回json数据,而有时数据里某一字段的值为null~,然后我们把此值赋值给NSArray,NSdictionary,或是NSString,然后我们会判断此值为null时,所做的处理,而通常惯性思维判断时我们都会写:if(dict == nil)或是if(dict == Nil)或是if(dict == NULL)再或是if(dict isEqual nil),我们发现,都不好用,根本没有起到判断的作用~后来我才发现,原来不能这样来判断。
简单点说,就是当字典,数组为null时,后台打印的输出结果是这样:
然后,我们需要在代码判断时利用[NSNull null]来判断,具体如:
isEqual:[NSNull null] 就搞定了,nsarray也是同样的道理。
控制台打印:str=(null) 代表着 字符串或数组或字典是一个空指针,(而非空字符串)判断的时候,直接用:
if(str == nil)就可以了。如下图所示:
而控制台打印:str = <null>,代表着这是一个空字符串,赋值为空,指针是存在的,只是内容为空,这种判断需要使用:
if(str is equal [NSNull null ]) ,因为在ios上,内容为空不能简单的判断str==null(null 在ios上得用[NSNull null])
一般这种情况是,服务器那边是null,直接返回@"null"的字符串,这样在ios这边不好判断,最好跟后台沟通,如果遇到null值,返回@"",好做判断
一、NULL
1、声明位置
2、定义
- #undef NULL
- #ifdef __cplusplus
- # if !defined(__MINGW32__) && !defined(_MSC_VER)
- # define NULL __null
- # else
- # define NULL 0
- # endif
- #else
- # define NULL ((void*)0)
- #endif
- # define NULL ((void*)0)
因此,NULL本质上是:(void*)0
3、用处及含义
4、示例
- charchar *string = NULL;
二、nil
1、声明位置
2、定义
- #ifndef nil
- # if __has_feature(cxx_nullptr)
- # define nil nullptr
- # else
- # define nil __DARWIN_NULL
- # endif
- #endif
- # define nil __DARWIN_NULL
- #ifdef __cplusplus
- #ifdef __GNUG__
- #define __DARWIN_NULL __null
- #else /* ! __GNUG__ */
- #ifdef __LP64__
- #define __DARWIN_NULL (0L)
- #else /* !__LP64__ */
- #define __DARWIN_NULL 0
- #endif /* __LP64__ */
- #endif /* __GNUG__ */
- #else /* ! __cplusplus */
- #define __DARWIN_NULL ((void *)0)
- #endif /* __cplusplus */
- #define __DARWIN_NULL ((void *)0)
3、用处及含义
4、示例
- NSString *string = nil;
- id anyObject = nil;
三、Nil
1、声明位置
2、定义
- #ifndef Nil
- # if __has_feature(cxx_nullptr)
- # define Nil nullptr
- # else
- # define Nil __DARWIN_NULL
- # endif
- #endif
3、用处及含义
4、示例
- Class anyClass = Nil;
四、NSNull
1、声明位置
2、定义
- @interface NSNull : NSObject <NSCopying, NSSecureCoding>
- + (NSNull *)null;
- @end
3、用处及含义
4、示例
我们通常初始化NSArray对象的形式如下:- NSArray *arr = [NSArray arrayWithObjects:@"wang",@"zz",nil];
- NSArray *arr = [NSArray arrayWithObjects:@"wang",@"zz",nil,@"foogry"];
- NSArray *arr = [NSArray arrayWithObjects:@"wang",@"zz",[NSNull null],@"foogry"];
五、总结
从前面的介绍可以看出,不管是NULL、nil还是Nil,它们本质上都是一样的,都是(void *)0,只是写法不同。这样做的意义是为了区分不同的数据类型,比如你一看到用到了NULL就知道这是个C指针,看到nil就知道这是个Objective-C对象,看到Nil就知道这是个Class类型的数据。
- iOS中nil/Nil/NULL的区别以及[NSNull null]
- iOS中nil、Nil、NULL、NSNull 区别
- iOS nil, Nil, NSNull NULL的区别
- ios nil Nil Null NSNull的区别
- ios nil Nil Null NSNull的区别
- ios nil Nil Null NSNull的区别
- iOS nil Nil NULL NSNull的区别
- iOS --- nil、Nil、NULL、NSNull的区别
- iOS nil、Nil、NULL、NSNull的区别
- iOS 中 nil NULL, NSNULL的区别
- ios中null nil Nil NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别
- 浅谈iOS 中 nil、Nil、null以及NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别
- IOS中nil、Null、Nil和NSNull的区别
- iOS中nil 、NULL、 Nil 、NSNull的区别详谈
- iOS中nil 、NULL、 Nil 、NSNull的区别
- iOS中nil,Nil,NULL,NSNull的区别
- hadoop下的Kmeans算法实现一
- iOS应用的crash日志的分析基础
- 关于Autodesk View and Data API的一些问题
- php解析数据格式转化为js数组
- mybatis报错
- iOS中nil/Nil/NULL/NSNull的区别
- 黑马程序员——Java之网络编程
- Neural Networks: Representation
- 电源的输出纹波噪声究竟该取多少才合适?
- Largest prime factor
- winedt 经验
- Hadoop中常用的InputFormat、OutputFormat(转)
- 【iOS】数据库FMDB的使用(一)
- android自定义属性attrs