標籤:
nil用來給對象賦值(Object-C的任何對象都屬於id類型),NULL則給任何指標賦值,NULL和nil不能互換,nil用於類指標賦值(在Object-C中類是一個對象,是類的meta-class的執行個體),而NSNull則用於集合操作,雖然它們表示的都是空值,但是使用場合完全不同,所以在編碼時嚴格按照變數類型來賦值,將正確的空值賦給正確的類型,使代碼易於閱讀和維護,也不易引起錯誤。 1.oc最好 用nil [ nil 任意方法],不會崩潰 nil 是一個對象值。NULL是一個通用指標(泛型指標)。 2. NSNULL,NULL和nil在本質上應該是一樣的,NULL和nil其實就是0,但是在Objective-c中,對於像NSArray這樣的類型,nil或NULL不能做為加到其中的Object,如果定義了一個NSArray,為其分配了記憶體,又想設定其中的內容為空白,則可以用[NSNULL null返回的對對象來初始化NSArray中的內容,3.因為在NSArray和NSDictionary中nil中有特殊的含義(表示列表結束),所以不能在集合中放入nil值。如要確實需要儲存一個表示“什麼都沒有”的值,可以使用NSNull類。NSNull只有一個方法:
+ (NSNull *) null;
因為Object-C的集合對象,如NSArray、NSDictionary、NSSet等,都有可能包含NSNull對象,所以,如果一下代碼中的item為NSNull,則會引起程式崩潰。
NSString *item=[NSArray objectAtIndex:i];if([item isEqualToString:@"TestNumber"]){ //}以下代碼是常見的錯誤,release對象沒有設定為nil,從而引起程式崩潰。id someObject=[[Object alloc] init];//...[someObject release];//...if(someObject){ //crash here}
nil用來給對象賦值(Object-C的任何對象都屬於id類型),NULL則給任何指標賦值,NULL和nil不能互換,nil用於類指標賦值(在Object-C中類是一個對象,是類的meta-class的執行個體),而NSNull則用於集合操作,雖然它們表示的都是空值,但是使用場合完全不同,所以在編碼時嚴格按照變數類型來賦值,將正確的空值賦給正確的類型,使代碼易於閱讀和維護,也不易引起錯誤。
//判斷對象不空if(object) {}//判斷對象為空白if(object == nil) {}//數組初始化,空值結束NSArray *pageNames=[[NSArray alloc] initWithObjects:@"DocumentList",@"AdvancedSearch",@"Statistics",nil];//判斷數組元素是否為空白UIViewController *controller=[NSArray objectAtIndex:i];if((NSNull *)controller == [NSNull null]){ //}//判斷字典對象的元素是否為空白NSString *userId=[NSDictionary objectForKey:@"UserId"];if(userId == [NSNull null]){ //}
Object-C有個可愛的特性,就是當發訊息給nil對象時,系統返回0值而不是引起異常,這和JAVA煩人的NullPointerException以及C/C++的程式直接崩潰的處理完全不一樣,明白Object-C的這個特性對於開發正確的IOS程式非常重要,因為nil是對象的合法值,nil對象同樣可以接收訊息,例如:
person=nil;[person castBallot];NSLog("person=%@",person);
objective-C nil,Nil,NULL 和NSNull的小結