iOS - nil、Nil、NULL、NSNull介绍和开发中对
2019-03-26 本文已影响0人
ShIwEn9
在开发中我们会经常遇到得数据为空的判断。
比如我们在获取地址省市区信息的时候,有时会因为某些市没有区的情况导致返回空<null>,如果这样进行网络请求会出现app奔溃的情况,所以这时候我们就要进行数据判断之后在去发送请求。
一、首先我们先对iOS开发中遇到的空值进行介绍:
-
nil :指向一个对象的空指针,nil是一个空对象,已经完全从内存中消失了
-
Nil :指向一个类的空指针(完全等同于nil 但是常用于类置空)
-
NULL :指向其他类型的空指针(比如:基本类型和c类型).
-
NSNull :通常表示集合中的类型(其实它也是一个对象,拥有有效的内存地址)[NSNull null]
二、对JSON返回的<null>进行判断
if([result isEqual:[NSNull null]]) {
//result是从服务器返回的数据
//在这里进行操作
}
三、对(null)的判断
if(result == nil) {
//在这里进行操作
}
四、基本数据类型的空值判断
- 对于类似于NSString类型的数据进行空值判断
1、string == nil;
2、[string isEqualToString:@""];
- 对于类似于NSNumber类型的数据进行空值判断
1、number == nil;
2、[number isEqualToNumber:@0];
- 对于类似于NSArray类型的数据进行空值判断
1、array == nil;
2、array.count = 0;
- 对于类似于NSDictionary类型的数据进行空值判断
1、[dictionary isEqual:[NSNull null]];
2、dictionary.count = 0;
- 对于对象类型的数据进行空值判断
if(!class) return;
抽取方法:
- (NSString *) changeForNull:(NSString *)change{
NSString *temp = [NSString stringWithFormat:@"%@", change];
if ([temp isEqualToString:@"<null>"] || [temp isEqualToString:@"(null)"] || [temp isEqualToString:@""]) {
temp = @"";
}
return temp;
}
宏定义:
/// 是否为空对象
#define kObjectIsNil(__object) ((nil == __object) || [__object isKindOfClass:NSNull.class])
#define kObjectIsNotNil(__object) (!kObjectIsNil(__object))
/// 字符串为空
#define kStringIsEmpty(__string) (kObjectIsNil(__string) || (__string.length == 0))
/// 字符串不为空
#define kStringIsNotEmpty(__string) (!kStringIsEmpty(__string))