NSNull是一个单例对象:
NSNull的声明:
+ (NSNull *)null;
@end
注意前方高能:
NULL、nil、Nil本质上没有任何区别都是一串0,别被它们不同的外表吓住。为什么会有这三个东西,完全是编程习惯,C语言的空指针习惯NULL,OC的对象习惯nil, OC的类对象习惯Nil。仅此而已。
验证:
NSObject *a = nil;
Class b = Nil;
NSObject *c = NULL;
void *d = nil;
void *e = Nil;
Class *f = nil;
NSObject *__strong *g = Nil;
NSLog(@"a = %d b = %d, c = %d, d = %d, e = %d, f = %d, g = %d", (int)a, (int)b, (int)c, (int)d, (int)e, (int)f, (int)g);
[c description];
[(NSObject *)nil description];
[(NSObject *)NULL description];
[(NSObject *)Nil description];
完全能正常运行
控制台打印输出:
2018-06-16 16:00:12.233633+0800 ockv[94870:19090179] a = 0 b = 0, c = 0, d = 0, e = 0, f = 0, g = 0
打断点观察发现xocde的变量窗口中:
- C语言的指针和OC的二级指针都是NULL
- OC对象都是nil
- 至于为什么Class是0x0,我也不太清楚。
结论:Nil、nil、NULL三者本质都是一样的,都是0,上述变量的实质都是指针,指针里面的值都是0。而NSNull是一个对象。
网友评论