nil Nil null @"" 关于nil和 null和NSNull的区别及相关问题

今天遇到这个问题,就是前面创建对象是这样创建的

  
  
  
  
  1. m_infos = [[NSMutableArray alloc] initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"",@"", nil];

然后想判断其中一个为空的时候执行某方法.但是以下这个做法是错误的:

  
  
  
  
  1. NSString *stuName =  [m_infos objectAtIndex:1];

  2. //这里不走if,直接跳过去

  3. if (stuName == nil || [stuName isEqual:[NSNull null]] == YES ]) {

  4.        [self showErrorHubContent:@"学生姓名不能为空"];

  5.    }


接下来分析:

nil和null从字面意思来理解比较简单,nil是一个对象,而NULL是一个值,我的理解为nil是将对象设置为空,而null是将基本类型设置为空的,个人感觉有点像属性当中,基本类型分配为assign NSString类型一般分配copy,而对象一般用retain。而且我们对于nil调用方法,不会产生crash或者抛出异常。
看一段

nil -> Null-pointer to objective- c object

NIL -> Null-pointer to objective- c class

null-> null pointer to primitive type or absence of data.

看一下用法

NSURL *url = nil;

Class  class = Nil;

int *pointerInt = NULL;

nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。这些可以理解为nil,Nil, NULL的区别吧。

你可以看出nil,Nil他们都是指向空的指针的

所以我用了这句就行啦

  
  
  
  
  1. if (stuName == nil || [stuName isEqual:[NSNull null]] == YES || [stuName isEqualToString:@"" ])

在后边加了一句[stuName isEqualToString:@""]    

这样就可以了。

2、NSNULL,NULL和nil在本质上应该是一样的,NULL和nil其实就是0,但是在Objective-c中,对于像NSArray这样的类型,nil或NULL不能做为加到其中的Object,如果定义了一个NSArray,为其分配了内存,又想设置其中的内容为空,则可以用[NSNULL null返回的对对象来初始化NSArray中的内容,我的感觉有点像C语言中malloc一个内存空间,然后用memset初始化这段空间里的值为0。

       黑码哥

  1. _viewControllers = [[NSMutableArray alloc] init];  

  2. for (unsigned i = 0; i < _pages; i++) {  
  3. [_viewControllers addObject:[NSNull null]];  
  4. }  
  5. ymBaseController *controller = [_viewControllers objectAtIndex:page];  
  6.          if ((NSNull *)controller == [NSNull null])   
  7.     {  
  8. ...  
  9.             }  
  10.     [_viewControllers replaceObjectAtIndex:page withObject:contro


你可能感兴趣的:(ios,对象,数组,nil,NSNull)