今天突然間對nil和NULL產(chǎn)生了疑問,就在網(wǎng)上查了一下相關(guān)的問題,看完之后終于有了清晰的認(rèn)識,跟我一樣有疑問的童鞋們可以看看。
-
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); } -
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或者拋出異常。 -
Nil,定義一個空的類
示例代碼: Class someClass = Nil; Class anotherClass = [NSString class]; -
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的測試操作。