iOS-nil、Nil、NULL和NSNull区别详细说明(去除数据请求返回的null)

来源:互联网 发布:linux tomcat调试模式 编辑:程序博客网 时间:2024/05/21 17:38

 前言

 我们先看nil和null的解释:
 nil   n.无,零;零分
 null  adj.<术>零值的;等于零的;(协议) 无法律效力;失效的

 nil和null都表示零和无的意思。

 nil

 定义了一个空的实例来指向OC对象的空指针,也就是一个空的OC对象;
 NSString *str = nil;
 NSData *data = nil;
 NSLog(@"%@",nil);
 NSLog(@"%@",str);
 NSLog(@"%@",data);
 NSLog(@"%p",nil);
 NSLog(@"%p",str);
 NSLog(@"%p",data);
 NSLog(@"%d",(data == nil));
 控制台打印出来是(null)

 Nil

 Nil是一个空的类
 Class someClass = Nil;
 Class anotherClass = [NSString class];

 NULL<null>
 NULL是C语言的空指针
 
 int *pointerToInt = NULL;
 char *pointerToChar = NULL;
 struct TreeNode *rootNode = NULL;
 NSLog(@"%@",pointerToInt);
 NSLog(@"%s",pointerToChar);
 NSLog(@"%@",rootNode);
 NSLog(@"%d",pointerToInt==NULL);
 NSLog(@"%d",pointerToInt==nil);
 控制台打印出来是(null)

 判断一个对象是不是NULL

 if([nameStr isEqual:[NSNull null]])

  iOS开发服务器返回(null) 与<null>的处理,我们在开发的过程中,很多人会遇到开发不规范的后台小伙伴,对为   赋  值的对象,直接返过来,我们这边接收以后就变成null,而且判断方法只能用[nameStr isEqual:  [NSNull null]],有时候我们还要判断nil,所以非常麻烦,有没有能去除null的方法呢?答案是肯定有啦!我  们可以自己写一个类来遍历与替换,这样比较麻烦一些,还有一种方法就是使用AFNetworking提供的方法,方法  如下:

 AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer];

 response.removesKeysWithNullValues = YES;//去除null

 manager.responseSerializer = response;

 manager.requestSerializer  = [AFJSONRequestSerializer serializer];


 NSNull

 NSNull是一个类,代表空值的单利,只有一个单利方法[NSNull null],用于表示集合值为空的对象(oc中nil是不能  存放在集合中的,因为nil是集合结束的标志位)
 NSArray *arr = [NSArray arrayWithObjects:@"one",@"two",[NSNull null], nil];
 for (NSString *str in arr) {
 NSLog(@"%@",str);
 }
 2015-10-06 16:40:25.816 test[96177:5565855] one
 2015-10-06 16:40:25.817 test[96177:5565855] two
 2015-10-06 16:40:25.817 test[96177:5565855] <null>

 总结

 Symbol  Value         Meaning
 NULL  (void *)0         C指针的空值
 nil          (id)0         OC对象的空值
 Nil          (Class)0         OC类对象的空值
 NSNull  [NSNull null] 用于表示空值的单例


希望对你有所帮助,也欢迎大家补充!微笑




1 0