一、区别: nil、Nil、NULL和[NSNull null]的区别
1.nil
当一个对象置为nil时,这个对象的内存地址就会被系统收回。置空之后是不能进行retain,copy等跟引用计数有关的任何操作的。
2.Nil
nil完全等同于Nil,只不过由于编程习惯,人们一般把对象置空用nil,把类置空用Nil。
3.NULL
这个是从C语言继承来的,就是一个简单的空指针
4.[NSNull null]
这个才是重点:[NSNull null]和nil的区别在于,nil是一个空对象,已经完全从内存中消失了,而如果我们想表达“我们需要有这样一个容器,但这个容器里什么也没有”的观念时,我们就用到[NSNull null],它就是为“值为空的对象”。如果你查阅开发文档你会发现NSNull这个类是继承NSObject,并且只有一个“+ (NSNull *) null;”类方法。这就说明NSNull对象拥有一个有效的内存地址,所以在程序中对它的任何引用都是不会导致程序崩溃的。
1.判断方法
-(BOOL)isNull:(id)object
{
// 判断是否为空串
if ([object isEqual:[NSNull null]]) {
return NO;
}
else if ([object isKindOfClass:[NSNull class]])
{
return NO;
}
else if (object==nil){
return NO;
}
return YES;
}
2.对空串处理
-(NSString*)convertNull:(id)object{
// 转换空串
if ([object isEqual:[NSNull null]]) {
return @" ";
}
else if ([object isKindOfClass:[NSNull class]])
{
return @" ";
}
else if (object==nil){
return @"无";
}
return object;
}
3. json 返回NSNull处理
- (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property{
if (oldValue == [NSNull null]) {
if ([oldValue isKindOfClass:[NSArray class]]) {
return @[];
}else if([oldValue isKindOfClass:[NSDictionary class]]){
return @{};
}else{
return @"";
}
}
return oldValue;
}
链接:https://www.jianshu.com/p/27274cea9cfc
链接:https://blog.csdn.net/l2i2j2/java/article/details/51318933
链接:https://my.oschina.net/joanfen/blog/134295
网友评论