Objective-C 中的 NULL vs NIL

observeValueForKeyPath:ofObject:change:context:中-为什么在没有指定上下文指针的情况下,文档使用 NULL而不是 nil

95759 次浏览

它们在技术上是相同的(0) ,但是 nil 通常用于 Objective-C 对象类型,而 NULL 用于 c 样式的指针(void *)。

nil应该只用于代替 id,我们 Java 和 C + + 程序员会认为这是一个指向对象的指针。对非对象指针使用 NULL

看看这个方法的声明:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context

上下文是 void *(即 C 样式的指针) ,因此您肯定会使用 NULL(有时声明为 (void *)0)而不是 nil(类型为 id)。

它们在技术上是一样的,只是风格不同:

  • Objective-C 风格表示 nil是用于 id类型(以及指向对象的指针)的。
  • C 风格表示 NULL是用于 void *的。
  • C + + 风格通常表示应该只使用 0

我通常使用与类型为 声明的语言匹配的变体。

NULLnilC equivalent,是一个空指针;

其中 nil is zero typed as id,

NULL is zero typed as void* .

有一点很重要: 不能将消息发送到 NULL。因此,在 Objective-C 中很多地方都倾向于使用 nil。

它们几乎是一样的,除了,

nil以 Objective-C 风格使用。 其中 NULL用于 C 类型指针,并被类型定义为 (void *)