objective-C nil,Nil,NULL 和NSNull的小結

來源:互聯網
上載者:User

標籤:

小結: 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的小結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.