Objective-C中nil, Nil, NULL和NSNull的區別

<a name="Chart">區別</a>

Symbol Value Meaning
NULL (void *)0 literal null value for C pointers
nil (id)0 literal null value for Objective-C objects
Nil (Class)0 literal null value for Objective-C classes
NSNull [NSNull null] singleton object used to represent null

1. nil:對象為空

定義某一實例對象為空值。例如:

NSObject* obj = nil;  
if (nil == obj) {  
    NSLog(@"obj is nil");  
}  
else {  
    NSLog(@"obj is not nil");  
}

2. Nil:類為空

定義某一為空。例如:

Class someClass = Nil;  
Class anotherClass = [NSString class];

3. NULL:基本數據對象指針為空

NULL是無類型的,只是一個宏,它代表為空。用于c語言的各種數據類型的指針為空。例如:

intint *pointerToInt = NULL;   
charchar *pointerToChar = NULL;   
struct TreeNode *rootNode = NULL;

4. NSNull

集合對象無法包含 nil 作為其具體值,如NSArray、NSSet和NSDictionary。相應地,nil值用一個特定的對象 NSNull 來表示。NSNull 提供了一個單一實例用于表示集合對象屬性中的的nil值。

@interface NSNull : NSObject <NSCopying, NSSecureCoding>  
+ (NSNull *)null;
@end

在NSNull單例類中,提供了唯一的方法null:Returns the singleton instance of NSNull.
例如:

NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];  
mutableDictionary[@"someKey"] = [NSNull null]; // Sets value of NSNull singleton for `someKey`  
NSLog(@"Keys: %@", [mutableDictionary allKeys]); // @[@"someKey"]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容