我们先看一下苹果文档上的解释
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.png2. 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
网友评论