nil Nil NULL NSNull kCFNull的区别

标志 含义
NULL C指针的字面零值 (void *)0
nil Objective-C对象的字面零值 (id)0
Nil Objective-C类的字面零值 (Class)0
NSNull 用来表示零值的单独的对象,可以作为数组的占位符 NSNull
kCFNull NSNull的单例 kCFNull

字面零值的解释

//数据输出应该是Nil
    Class class = class_getSuperclass(Nil);

    if (class == nil) {
        NSLog(@"class:nil");
    }
    if (class == Nil) {
        NSLog(@"class:Nil");
    }
    if (class == NULL) {
        NSLog(@"class:NULL");
    }
    if (class == [NSNull class]) {
        NSLog(@"class:NULL");
    }

//打印结果
2017-09-19 11:17:31.536 xctest[3144:977580] class:nil
2017-09-19 11:17:31.537 xctest[3144:977580] class:Nil
2017-09-19 11:17:31.540 xctest[3144:977580] class:NULL

说明比较大小中nil、Nil、NULL的值都相等(字面零值)

id 和 void * 的区别

id本身就是一个指针,而且可以指向任何一个继承了Object(或者NSObject)类的对象。
所以需要注意的是:id是一个指针,所以你在使用id的时候不需要加星号。

比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。
而id *foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObject的一个子类。

你可能感兴趣的:(nil Nil NULL NSNull kCFNull的区别)