ios学习笔记之nil、NULL和NSNull

本文详细解释了Objective-C中nil、NULL及NSNull的区别与应用场景,包括如何在不同上下文中正确使用这些空值标识符,并提供了示例代码,帮助开发者避免因空值处理不当而导致的程序错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nil用来给对象赋值(oc的任何对象都属于id类型),NULL则给任何指正赋值,NULL和nil不能互换,nil用于类指针赋值(在oc中类是一个对象,是类的meta-class的实例),而NSNull则用于集合操作,虽然它们表示的都是空值,但使用场合完全不同,所以在编码时要严格按照变量类型来赋值,将正确的空值赋给正确的类型,使代码抑郁阅读和维护,也不易引起错误。
        //判断对象不为空
     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. if (object) {}  
if (object) {}

      //判断对象为空
     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. if (object == nil) {}  
if (object == nil) {}

      //数组初始化,空值结束
     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. NSArray *pageNames [[NSArrayalloc] initWithObjects:@"Document", @"Advanced", @"Statistics", nil ];  
NSArray *pageNames = [[NSArrayalloc] initWithObjects:@"Document", @"Advanced", @"Statistics", nil ];

      //判断数组元素是否为空
     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. UIViewController *controller [NSArray objectAtIndex:i];   
  2.     if ((NsNull *)controller == [NSNull null]) {}  
UIViewController *controller = [NSArray objectAtIndex:i];
    if ((NsNull *)controller == [NSNull null]) {}

      //判断字典对象的元素是否为空
     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. NSString *userId [NSDictionaryobjectForKey:@"key"];   
  2.     if (userId == [NSNullnull]) {}  
NSString *userId = [NSDictionaryobjectForKey:@"key"];
    if (userId == [NSNullnull]) {}

       
        Oc有个特性,就是当发送消息给nil对象时,系统返回0值而不是引起异常,这和java烦人的NullPointerException以及C/C++的程序直接崩溃的处理完全不同,明白Oc的这个特性对于开发正确的ios程序非常重要,因为nil是对象的合法值,nil对象同样可以接受消息。eg:

     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. person nil;   
  2.     [person castBallot];   
  3.     NSLog(@"person %@", person);   
  4.       
 person = nil;
     [person castBallot];
     NSLog(@"person = %@", person);
     

        将对象置空,然后发送消息,程序同样接着往下执行而不会崩溃。

       
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. NSDecimalNumber *number nil;   
  2.      NSLog(@"number %.2f", [number doubleValue]);  
NSDecimalNumber *number = nil;
     NSLog(@"number = %.2f", [number doubleValue]);


        对象以为空,获取的数据可能已经不正确,这段代码将打印如下。

        number = 0.00

        空值处理不当是引起程序错误乃至崩溃的重要原因之一。
        因为oc的集合对象,如NSArray,NSDictionary,NSSet等,都有可能包含NSNull对象,所以,如果以下代码中的item为NSNull,则会引起程序崩溃。
     
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. NSString *item [NSArray objectAtIndex:i];   
  2.     if ([item isEqualToString:@"test"]) {   
  3.           
  4.      
 NSString *item = [NSArray objectAtIndex:i];
     if ([item isEqualToString:@"test"]) {
        
     }

      以下代码时常见的错误,release对象没有设置为nil,从而引起程序崩溃。
       
Java代码 复制代码  收藏代码ios学习笔记之nil、NULL和NSNull
  1. id someObj [[Objectalloc] init];   
  2.      ...   
  3.      [someObj release];   
  4.      ...   
  5.      if (someObj) {   
  6.            
  7.      }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值