0
点赞
收藏
分享

微信扫一扫

ios学习笔记之nil、NULL和NSNull


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

Java代码

ios学习笔记之nil、NULL和NSNull_Java

 

ios学习笔记之nil、NULL和NSNull_Java_02

ios学习笔记之nil、NULL和NSNull_Java_03


   
 
  
1. if (object) {}  
 
 
if (object) {}
 
 
  
  
  
  //判断对象为空
 
  
  
  
 

    Java代码 
    

 
    
    
  
1. if (object == nil) {}  
 
 
if (object == nil) {}
 
 
  
  
  
  //数组初始化,空值结束
 
  
  
  
 

    Java代码 
    

 
    
    
  
1. *pageNames = [[NSArrayalloc] initWithObjects:@"Document", @"Advanced", @"Statistics", nil ];  
 
 
NSArray *pageNames = [[NSArrayalloc] initWithObjects:@"Document", @"Advanced", @"Statistics", nil ];
 
 
  
  
  
  //判断数组元素是否为空
 
  
  
  
 

    Java代码 
    

 
    
    
  
1. *controller = [NSArray objectAtIndex:i];   
2.    if ((NsNull *)controller == [NSNull null]) {}  
 
 
UIViewController *controller = [NSArray objectAtIndex:i];
    if ((NsNull *)controller == [NSNull null]) {}
 
 
  
  
  
  //判断字典对象的元素是否为空
 
  
  
  
 

    Java代码 
    

 
    
    
  
1. *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代码 
    

 
    
    
  
1. person = nil;   
2.    [person castBallot];   
3.    NSLog(@"person = %@", person);   
4.      
 
 
person = nil;
     [person castBallot];
     NSLog(@"person = %@", person);
 
 
  
  
  
  
  将对象置空,然后发送消息,程序同样接着往下执行而不会崩溃。
 

  
  
  
  
 

    Java代码 
    

 
    
    
  
1. *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代码 
    

 
    
    
  
1. *item = [NSArray objectAtIndex:i];   
2.    if ([item isEqualToString:@"test"]) {   
3.          
4.    }  
 
 
NSString *item = [NSArray objectAtIndex:i];
     if ([item isEqualToString:@"test"]) {
        
     }
 
 
  
  
  
  以下代码时常见的错误,release对象没有设置为nil,从而引起程序崩溃。
 
  
  
  
  
 

    Java代码 
    

 
    
    
  
1. someObj = [[Objectalloc] init];   
2.     ...   
3.     [someObj release];   
4.     ...   
5.     if (someObj) {   
6.           
7.     }

Java代码

ios学习笔记之nil、NULL和NSNull_Java

 

ios学习笔记之nil、NULL和NSNull_Java_02

ios学习笔记之nil、NULL和NSNull_Java_03

举报

相关推荐

0 条评论