区分nil,Nil,Null,NSNull

1.nil

指向对象的指针为空

/** 定义 */
#ifndef nil
# if __has_feature(cxx_nullptr)
#   define nil nullptr
# else
#   define nil __DARWIN_NULL
# endif
#endif
/** OC中用于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
/** OC中用于Class类型的对象 */
Class aClass = Nil;
Clsss bClass = [NSURL class];

3.Null

指向C类型的指针为空

/** 定义 */
#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 <span style="white-space:pre"> </span>= NULL;
struct stStruct = NULL;

4.NSNull

在OC中是一个类,NSNull有 + (NSNull *)null; 单例方法,多用于集合(NSArray,NSDictionary)中值为空的对象

/** NSArray */
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 */
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Object0", @"Key0",
                                                                        @"Object1", @"Key1",
                                                                        nil,        @"Key-nil",
                                                                        @"Object2", @"Key2", nil];
NSLog(@"%@", dictionary); // 输出2个key-value,NSDictionary也是以nil结尾

/** NSMutableDictionary */
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"];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值