Objective-C中nil/NULL/Nil/NSNull区别详解
在Objective-C中,有4种表示“空”的方法,即:nil、NULL、Nil和NSNull,这4种方法在使用场景上略有差别,在此简单归纳总结一下。
nil
nil主要用于OC对象为空的情况。在OC中直接定义一个对象但不赋值,或者定义一个属性,编译器会自动给对象的指针设置初始值为nil。
@property (nonatomic, copy) NSString *string3;
NSString *string1;
NSString *string2 = nil;
NSLog(@"%p--%p--%p",string1,string2,self.string3);
运行结果:
NULL
NULL主要用于基本数据类型为空的情况。在stddef.h中的定义如下。
# define NULL ((void*)0)
示例代码如下。
int *nullNum = NULL;
int num = 1;
nullNum = #
NSLog(@"%d",*nullNum);
运行结果:
Nil
Nil的定义是null pointer to object-c class,指的是一个类指针为空。
Class class = [NSString class];
if (class != Nil) {
NSLog(@"class name: %@", class);
}
运行结果:
NSNull
NSNull常用于在数组或者字典中插入一个空对象用于占位使用。
NSArray *nullArray = @[[NSNull null],[NSNull null]];
NSLog(@"%@",nullArray);
运行结果: