nil:对象的空指针 是一个空对象
Nil: 类的空指针 是一个空类
NULL:其它类型的空指针,如一个c类型的内存指针, 是一个值
NSNull:在集合对象中,表示空值的对象
注意:
1. 若对象为nil: [obj test]将返回NO,而不是NSException(抛出异常)。
若对象为NSNull: [obj message]将抛出异常(NSException)
2. nil在OC中的通过jump to Definition指向的定义为:
#ifndef nil
#define nil NULL
#endif /* ! nil */
可以看出,其实nil只不过是NULL的另外一个别称而已。
NULL在OC中的定义为:
#ifndef NULL
#define NULL __DARWIN_NULL
#endif /* ! NULL */
从技术实现上来说,nil、NULL都是一样的。但是实际上这种方式能够增加代码的可读性。如果你给方法传递NULL值,那么参数就认为接收到的是C指针。如果是nil,那么认为接受的是一个对象。而Nil,则认为接受的是类(class)。