1. 一图胜千言
name | value | 含义 |
---|---|---|
NULL | (void *)0 | C 指针的字面空值(在指针环境中就是0),OC 中和 nil 一模一样 |
nil | (id)0 | OC中的对象的字面空值,可以用 nil 来调用方法而不会崩溃 |
Nil | (Class)0 | OC 中类的字面空值 |
NSNull | [NSNull null] | 一个用来代表空值的单例对象,只有一个方法:+ (NSNull *)null ,常用在集合类型中代表空值(例如 NSArray,不允许存放 nil/NULL) |
前三者本质上都是(void *)0
2. 扩展:
2.1 void *
的含义
void *
就是指 C 语言中的 void 指针。void 指针表示没有特定类型的指针,它可以存储任何类型的地址,并且可以转换为任何类型的指针。
2.2 一些有趣的事实:
-
void *
不能被直接取用
这个例子就直接编译不通过:#include<stdio.h> int main() { int a = 10; void *ptr = &a; printf("%d", *ptr); return 0; }
输出报错:
Compiler Error: 'void*' is not a pointer-to-object type
-
而转换类型后就可以:
#include<stdio.h> int main() { int a = 10; void *ptr = &a; printf("%d", *(int *)ptr); return 0; }
输出:
10
参考: