1. 程式人生 > >nil Nil NULL及NSNull 之間的區別

nil Nil NULL及NSNull 之間的區別

一、簡介 初學iOS,裡面的nil,Nil,NULL及NSNull 把我搞得有點暈。今天把他們歸納總結一下. 1、NULL NULL其實就是C\C++的用法,用來表示一個物件指標不指向任何物件,其值為0,當在物件指標為NULL的物件上呼叫方法或訪問成員變數時,會拋異常。 2、nil與Nil nilNil可以簡單的理解為Object-C自己搞的對objective- cNULL表示,用來表示一個物件指標不指向任何物件。 但是當在物件指標為nil 或NIL的物件上呼叫方法或訪問成員變數時,返回NO,不會異常,程式將繼續執行下去 發給nil物件的訊息返回值取決於其方法的返回型別。如果返回方法返回某個指標型別(例如物件指標),則返回值是nil.表示安全地將訊息傳遞給了nil物件-nil僅起著傳遞作用。如果返回方法是返回型別長度和指標型別相等或更小的int話,返回值是零。如果返回值是浮點型別或結構體的話,將得到某個未定義的結果。
但是nil與Nil還是有所區別的: NIL-> Null-pointer to objective- c class NIL 特對於表示Object-C的Class型別物件為NULL,表示其物件指標不指向任何物件。 nil -> Null-pointer to objective- c object nil 特對於表示Object-C的除Class型別外的物件為NULL,表示其物件指標不指向任何物件。NSArray末用nil來表示結束。 因為在NSArray和NSDictionary中nil中有特殊的含義(表示列表結束),所以不能在集合中放入nil值。如要確實需要儲存一個表示“什麼都沒有”的值,可以使用NSNull類 3、NSNull
NSNull是一個類,它只有一個方法:+ (NSNull *) null;   [NSNull null]用來在NSArray和NSDictionary中加入非nil(表示列表結束)的空值.   [NSNull null]是一個物件,用來表示空,他用在不能使用nil的場合。 二、例項 示例1 NSURL *url =nilClassclass=Nilint*pointerInt = NULL nil是一個Object-C普通型別物件指標為空,Nil是一個Class型別的物件指標為空,NULL是基本資料型別為空。 示例2 id object=nil;// 判斷物件不為空  
if (object) {  }  // 判斷物件為空  if (object == nil) {  }   示例3 // 陣列初始化,空值結束  NSArray *array = [[NSArray alloc] initWithObjects:@"First", @"Second", nil];  // 判斷陣列元素是否為空  NSString *element = [array objectAtIndex:2];  if ((NSNull *)element == [NSNull null]) {  }   要判斷陣列元素是否為空,以下寫法,都無效 if(!element)if([element length]>0)if(element== NULL)if(element ==Nil)  示例4 判斷字典物件的元素是否為空   NSDictionary*dictionary =[NSDictionary dictionaryWithObjectsAndKeys:@"iPhone",@"First",@"iPad",@"Second",nil];NSString*value =[dictionary objectForKey:@"First"];if((NSNull*)value ==[NSNullnull]){} 結束!