nil Nil NULL及NSNull 之間的區別
阿新 • • 發佈:2019-01-25
一、簡介
初學iOS,裡面的nil,Nil,NULL及NSNull 把我搞得有點暈。今天把他們歸納總結一下.
1、NULL
NULL其實就是C\C++的用法,用來表示一個物件指標不指向任何物件,其值為0,當在物件指標為NULL的物件上呼叫方法或訪問成員變數時,會拋異常。
2、nil與Nil
nil與Nil可以簡單的理解為Object-C自己搞的對objective- c的NULL表示,用來表示一個物件指標不指向任何物件。
但是當在物件指標為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 =nil;Classclass=Nil;int*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]){}
結束!