iOS-Objective-C中的nil、Nil、NULL、NSNull、NSNotFound总结

来源:互联网 发布:网络机顶盒电视没信号 编辑:程序博客网 时间:2024/06/01 08:05

在Objective-C开发中,经常会遇到类型为空的判断,如果不进行判断,就会崩溃,特别是网络请求后数据的判断以及赋值前的判断,下面是对类型判断做的一些总结,不足之处,请指正,欢迎补充!


一、nil、Nil、NULL、NSNull、NSNotFound的特点


01、nil 定义一个实例为空, 指向oc中对象的空指针.是对Objective-C id 对象赋空值,对于Objective-C 集合类对象 比如数组对象,字典对象,当我们不需要再使用他们的时候,对他们release 的同时最好也把他们赋值为nil,这样确保安全性,如果不赋值nil,可能导致野指针。

/// 对象Person *p = [[Person alloc] init];p = nil;/// 字符串NSString *string = @"hello 2017";string = nil;/// 字典...NSDictionary *dict = [NSDictionary dictionary];dict = nil;    

02、Nil是一个类指针为空

Class cs = Nil;

03、NULL可以用在C语言的各种指针上,在Objective-C里,nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值。而且我们对于nil调用方法,不会产生crash或者抛出异常。

NSArray *array = @[[NSNull null]];NSDictionary *dict1 = @{@"key":[NSNull null]};

04、NSNotFound 表示一个整型不存在,其实表示一个整型的最大值(NSIntegerMax)

NSInteger num = NSNotFound;/// 文档显示,NSNotFound表示 NSInteger 的最大值static const NSInteger NSNotFound = NSIntegerMax;


二、Objective-C中为空或相同判断


01、判断基本数据类型为空

/// 判断整型是否存在NSInteger num = 21;if (num == NSNotFound) {//...}/// 判断字符串是否为空+ (BOOL)isNullOrEmpty:(NSString *)s {    if(s == nil ||         s.length == 0 ||         [s isEqualToString:@""] ||         [s isEqualToString:@"(null)"]) {         return YES;    }    return NO;}/// 判断数组或者字典为空if (arr == nil || arr.count == 0) {}/// 判断字典或者数组元素为空if ([arr.firstObject isEqualToString:@"(null)"] ||    [arr.firstObject isEqualToString:@""] ||    [arr.firstObject isEqual:[NSNull null]]) {}

02、判断基本数据类型相同

// 判断两个数字相同 num1 == num2 // (num1/num2 可以为Int/NSInteger/CGFloat/double等)// 判断两个字符串相同 [string1 isEqualToString:string2];// 判断两个字典相同[dict1 isEqualToDictionary:dict2];// 判断两个数组相同[array1 isEqualToArray:array2];

03、判断事例对象相同

/// 判断两个实例是否相同 [class1 isEqual:class2];/// 判断是否是这个类或者是这个类子类的实例-(BOOL) isKindOfClass: classObj /// 判断是否是这个类的实例-(BOOL) isMemberOfClass: classObj 
0 0
原创粉丝点击