美文网首页
iOS中nil, Nil, NULL和NSNull的区别

iOS中nil, Nil, NULL和NSNull的区别

作者: Q14 | 来源:发表于2019-03-25 19:53 被阅读0次

我们先看一下苹果文档上的解释

nil

Defines the id of a null instance.

Nil

Defines the id of a null class.

NULL

Returns the singleton instance of NSNull.

NSNull

A singleton object used to represent null values in collection objects that don’t allow nil values.

可以总结为
nil (id)0   literal null value for Objective-C objects
Nil (Class)0    literal null value for Objective-C classes
NULL    (void *)0   literal null value for C pointers
NSNull  [NSNull null]   singleton object used to represent null

下面详细解释下区别

1. nil:对象为空

定义某一实例对象为空值。例如:

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

打印信息

屏幕快照 2019-03-25 下午7.34.24.png
2. Nil:类为空

定义某一类为空。例如:

Class someClass = Nil;  
Class anotherClass = [NSString class];
3. NULL:基本数据对象指针为空

NULL是无类型的,只是一个宏,它代表为空。用于c语言的各种数据类型的指针为空。例如:

int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
4. NSNull

集合对象无法包含 nil 作为其具体值,如NSArray、NSSet和NSDictionary。相应地,nil值用一个特定的对象 NSNull 来表示。NSNull 提供了一个单一实例用于表示集合对象属性中的的nil值。

// NSNull 苹果头文件定义
#import <Foundation/NSObject.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSNull : NSObject <NSCopying, NSSecureCoding>

+ (NSNull *)null;

@end

NS_ASSUME_NONNULL_END

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

 NSDictionary *dic = @{@"testNull": [NSNull null]};
 NSLog(@"%@", dic);

打印信息


屏幕快照 2019-03-25 下午7.48.43.png

相关文章

网友评论

      本文标题:iOS中nil, Nil, NULL和NSNull的区别

      本文链接:https://www.haomeiwen.com/subject/pftivqtx.html