http://www.jianshu.com/p/2ea9c3f737ea
一、nil的定义是null pointer to object-c object,
指的是一个OC对象指针为空,本质就是(id)0,是OC对象的字面0值
二、NULL的定义是null pointer to primitive type or absence of data,
指的是一般的基础数据类型为空,可以给任意的指针赋值。本质就是(void *)0,是C指针的字面0值。
三、Nil的定义是null pointer to object-c class,
指的是一个类指针为空。本质就是(class)0,OC类的字面零值。
四、NSNull好像没有什么具体的定义(懵),
它包含了唯一一个方法+(NSNull*)null,[NSNull null]是一个对象,用来表示零值的单独的对象。