nil历极、Nil、NULL衷佃、NSNull的區(qū)別
nil:指向一個(gè)對(duì)象的空指針,對(duì)objective c id 對(duì)象賦空值.
Nil:指向一個(gè)類的空指針,表示對(duì)類進(jìn)行賦空值.
NULL:指向其他類型(如:基本類型趟卸、C類型)的空指針, 用于對(duì)非對(duì)象指針賦空值.
NSNull:在集合對(duì)象中,表示空值的對(duì)象.
1.nil 在指向一個(gè)對(duì)象的指針為空 定義如下:
#ifndef nil
# if __has_feature(cxx_nullptr)
# define nil nullptr
# else
# define nil __DARWIN_NULL
# endif
#endif
在Objective-C中用于id類型的對(duì)象
NSString *str = nil;
NSURL*url = nil;
id object = nil;
2.Nil 指向一個(gè)類的指針為空 定義如下:
#ifndef Nil
# if __has_feature(cxx_nullptr)
# define Nil nullptr
# else
# define Nil __DARWIN_NULL
# endif
#endif
在Objective-C中用于Class類型的對(duì)象
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
用于對(duì)非對(duì)象指針賦空值簡(jiǎn)單舉例
int *intA = NULL;
char *charC = NULL;
struct structStr = NULL;
4.NSNull在Objective-C中是一個(gè)類.
NSNull有 + (NSNull *)null; 單例方法.
多用于集合(NSArray,NSDictionary)中值為空的對(duì)象.
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結(jié)尾
//
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
@"Object0", @"Key0",
@"Object1", @"Key1",
nil, @"Key-nil"
@"Object2", @"Key2",
nil];
NSLog(@"%@", dictionary); // 輸出2個(gè)key-value,NSDictionary也是以nil結(jié)尾
//
NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
[mutableDictionary setObject:nil forKey:@"Key-nil"]; // 會(huì)引起Crash
[mutableDictionary setObject:[NSNull null] forKey:@"Key-nil"]; // 不會(huì)引起Crash
//所以在使用時(shí)衰腌,如下方法是比較安全的
[mutableDictionary setObject:(nil == value ? [NSNull null] : value)
forKey:@"Key"];