nil Nil NULL與NSNull的區別

2021-07-15 05:52:37 字數 2088 閱讀 1042

1.nil

指向乙個物件的指標為空 在objc.h中的定義如下所示:

#ifndef nil

# if __has_feature(cxx_nullptr)

#   define nil nullptr

# else

#   define nil __darwin_null

# endif

#endif

在objective-c中用於id型別的物件

nsstring *name = 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 aclass = nil;

clsss bclass = [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   *pint     = null;

char *chchar = null;

struct ststruct = null; 

4.nsnull

在objective-c中是乙個類,只是名字中有個null,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"];

nil Nil NULL和NSNull的理解

其實早就想研究一下nil nil null和nsnull之間的區別,只是工作上除了nil,其它的幾乎少有用到,所以一直拖到今天。有時候感覺自己越來越浮躁,對細微處的知識理解不夠深入,因此這裡給自己提個醒 在以後的工作當中要始終保持一種鑽研的精神!言歸正傳,我們來分別介紹一下這四種型別 一 nil 我...

iOS中 nil Nil NULL 的區別

示例如下 id object nil 判斷物件不為空 if object 判斷物件為空 if object nil 陣列初始化,空值結束 nsarray array nsarray alloc initwithobjects first second nil 判斷陣列元素是否為空 nsstring ...

nil Nil NULL和NSNull的理解

其實早就想研究一下nil nil null和nsnull之間的區別,只是工作上除了nil,其它的幾乎少有用到,所以一直拖到今天。有時候感覺自己越來越浮躁,對細微處的知識理解不夠深入,因此這裡給自己提個醒 在以後的工作當中要始終保持一種鑽研的精神!言歸正傳,我們來分別介紹一下這四種型別 一 nil 我...