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

在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值