免费开源的iOS开发学习平台

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);

运行结果: