iOS中nil 、NULL、 Nil 、NSNull,你真的了解嗎?

今天突然間對nil和NULL產(chǎn)生了疑問,就在網(wǎng)上查了一下相關(guān)的問題,看完之后終于有了清晰的認(rèn)識,跟我一樣有疑問的童鞋們可以看看。

  1. nil,定義一個空的實例,指向OC中對象的空指針。

     示例代碼:
     NSString *someString = nil;
     NSURL *someURL = nil;
     id someObject = nil;
     if (anotherObject == nil) // do something
     
     用法講解:
      當(dāng)對某個對象release 的同時最好把他們賦值為nil,這樣可以確保安全性,如果不賦值nil,可能導(dǎo)致程序
      崩潰.
           NSArray * array = [NSArray arrayWithObjects:@"test",@"test1" ,nil];
           [array release];
           
           if (array)
           {
           //僅僅對數(shù)組release,并沒有賦值為nil,在程序某個地方如果繼續(xù)對數(shù)組操作,程序直接崩潰
               NSString * string = [array objectAtIndex:0];
               NSLog(@"%@",string);
           }
    
  2. NULL,NULL可以用在C語言的各種指針上。

     #define __DARWIN_NULL 
     #define__DARWIN_NULLConstants
     示例代碼:
     int *pointerToInt = NULL;    
     char *pointerToChar = NULL;  
     struct TreeNode *rootNode = NULL;
     
     用法講解:
       在Objective-C里,nil對象被設(shè)計來跟NULL空指針關(guān)聯(lián)的。他們的區(qū)別就是nil是一個對象,而NULL只是一個
       值。而且我們對于nil調(diào)用方法,不會產(chǎn)生crash或者拋出異常。
    
  3. Nil,定義一個空的類

     示例代碼:  
     Class someClass = Nil; 
     Class anotherClass = [NSString class];
    
  4. NSNull,NSNull是一個類,它定義了一個單例對象用于表示集合對象的空值

     集合對象無法包含nil作為其具體值,如NSArray、NSSet和NSDictionary。相應(yīng)地,nil值用一個特定的對象
     NSNull來表示。NSNull提供了一個單一實例用于表示對象屬性中的的nil值。默認(rèn)的實現(xiàn)方法中,
     dictionaryWithValuesForKeys:和setValuesForKeysWithDictionary:自動地將        NSNull和nil相互轉(zhuǎn)換,因此您的對象不需要進(jìn)行NSNull的測試操作。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容