nil、Nil、NULL、NSNull的區(qū)別

nil、Nil、NULL、NSNull的區(qū)別

nil:指向一個對象的空指針,對objective c id 對象賦空值.

Nil:指向一個類的空指針,表示對類進行賦空值.

NULL:指向其他類型(如:基本類型、C類型)的空指針, 用于對非對象指針賦空值.

NSNull:在集合對象中,表示空值的對象.

1.nil 在指向一個對象的指針為空 定義如下:

#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif

在Objective-C中用于id類型的對象

NSString *str = nil;
NSURL    *url  = nil;
id object      = nil;

2.Nil 指向一個類的指針為空 定義如下:

#ifndef Nil
# if __has_feature(cxx_nullptr)
#   define Nil nullptr
# else
#   define Nil __DARWIN_NULL
# endif
#endif

在Objective-C中用于Class類型的對象

Class Class1 = Nil;
Clsss Class2 = [NSURL class];

3.NULL 指向C類型的指針為空 在stddef.h中定義如下:

#if defined(__need_NULL)
#undef NULL
#ifdef __cplusplus
#  if !defined(__MINGW32__) && !defined(_MSC_VER)
#    define NULL __null
#  else
#    define NULL 0
#  endif
#else
#  define NULL ((void*)0)
#endif

用于對非對象指針賦空值簡單舉例

int   *intA    = NULL;
char *charC     = NULL;
struct structStr = NULL; 

4.NSNull在Objective-C中是一個類.

NSNull有 + (NSNull *)null; 單例方法.

多用于集合(NSArray,NSDictionary)中值為空的對象.

NSArray *array = [NSArray arrayWithObjects:
                      [[NSObject alloc] init],
                      [NSNull null],
                      @"aaa",
                      nil,
                      [[NSObject alloc] init],
                      [[NSObject alloc] init], nil];

NSLog(@"%ld", array.count); // 輸出 3,NSArray以nil結尾

//

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                @"Object0", @"Key0",
                                @"Object1", @"Key1",
                                nil,        @"Key-nil"
                                @"Object2", @"Key2",
                                nil];
NSLog(@"%@", dictionary); // 輸出2個key-value,NSDictionary也是以nil結尾

//

NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
[mutableDictionary setObject:nil forKey:@"Key-nil"]; // 會引起Crash
[mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不會引起Crash
//所以在使用時,如下方法是比較安全的
[mutableDictionary setObject:(nil == value ? [NSNull null] : value)
                      forKey:@"Key"];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容