151207 iOS之 nil null 和nsnull
来源:互联网 发布:数据营销有哪些 编辑:程序博客网 时间:2024/06/10 21:54
用了这么久还一直没有理清nil null 和nsnull之前的关系,今天终于理了一下。
先概括说一下ios里的空值, ios 里的空值主要有nil, Nil,NULL, NSNull这几个。
1.nil,Objective-C在C的表达不存在的基础上增加了nil。nil是一个指向不存在的对象指针。虽然它在语义上与NULL不同,但它们在技术上是相等的。
2.Nil,在Foundation/NSObjCRuntime.h中,Nil被定义为指向零的类指针。这个nil的鲜为人知的大写的表兄并不常常出现,但它至少值得注意。
3.NULL,C用0来作为不存在的原始值,而NULL作为指针(这在指针环境中相当于0)。
4.NSNull NSNull在Foundation和其它框架中被广泛的使用,以解决如NSArray和NSDictionary之类的集合不能有nil值的缺陷
其实只有1,和4我们程序里是经常用。
nil
NSNull
NSNull 是一个代表空值的类,是一个 ObjC 对象。实际上它只有一个单例方法:+[NSNull null],一般用于表示集合中值为空的对象。
// 因为 nil 被用来用为集合结束的标志,所以 nil 不能存储在 Foundation 集合里。
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
虽然 nil, [NSNull null] 的值相同,但使用场合不同,一般nil用来对对像付值或判断,但是如果这个对像是从集合类(NSArray, NSDictionary)中获得的就要使用,nsnull来进行判断,而不能用nil,因为nil是被用来做集合结束标志的。
如从服务器中获取的返回json数据,要获得某一个字段的值,我们可以这样来判断这个值是否为空
NSString* result = [dic objectForKey:@"key"];
//构建一个json字符串 NSString* jsonString = @"{\"status\":1,\"service_name\":null,\"service_id\":null}"; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; //从转json字符串为字典 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; NSLog(@"jsonString = %@", jsonString); NSLog(@"dic = %@", dic); NSString* service_id = [dic objectForKey:@"service_id"]; <span style="background-color: rgb(255, 0, 0);"> //这时字典中有“service_id”这个key,但是这个key对应的value是空值 //这时得到的service_id不为nil而是一个NSNull类的对像</span> if([service_id isKindOfClass:[NSNull class]])//或 [service_id isEqualTo:[NSNull null]] { NSLog(@"test1 为NSNull"); } <span style="background-color: rgb(255, 0, 0);"> //这个字典里没有service_id11111这个key,这时service_id的值为nil而不是NSNull类型</span> service_id = [dic objectForKey:@"service_id11111"]; if(service_id == nil) { NSLog(@"test1 不是 NSNull,而是nil"); }
- 151207 iOS之 nil null 和nsnull
- IOS开发之----nil, NULL和NSNull
- iOS之nil, Nil, NULL,null和NSNull的区别
- IOS注意之nil,Nil,NULL,NSNull
- iOS 探讨之 nil Nil NULL NSNull
- IOS之nil,Nil,null,Null,NULL,NSNull
- iOS之nil,Nil,null,Null,NULL,NSNull
- ios学习笔记之nil、NULL和NSNull
- iOS nil NULL NSNull
- iOS 【nil,NULL,NSNULL】
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- ios nil、NULL和NSNull 的使用
- Ext 向Ext.form.ComboBox()中添加列表的分类
- Android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- leetcode -- Binary Tree Level Order Traversal & II-- 重点
- CAS原子操作实现无锁及性能分析
- 循环的理解和比较
- 151207 iOS之 nil null 和nsnull
- 使用 CreateTimerQueueTimer 定时器时需要注意的一个参数
- Java 学习历程(一)程序执行过程
- 利用Detours进行API拦截
- Android开发黄金搭档:Android Studio + Genymotion模拟器
- sql 转换 自定义函数
- qt将http更改为https
- 集合的基本运算: 依据集合运算规则,实现任意给定两个集合的交、并、差、笛卡儿积运算,和第一个集合的幂集,并显示运算结果。
- Qt学习——qt界面的国际化显示