Objective-C中的NULL和nil

observeValueForKeyPath:ofObject:change:context: – 为什么在没有指定上下文指针时,文档使用NULL而不是nil

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

看看这个方法的声明:

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

上下文是一个void * (即C风格的指针),所以你肯定会使用NULL (有时声明为(void *)0 )而不是nilidtypes)。

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

他们在技术上是相同的,只是风格不同:

  • Objective-C风格说, nil是什么用于idtypes(和指向对象)。
  • C风格说NULL是用于void *
  • C ++风格通常说你应该只使用0

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

NULLnilC equivalent ,一个指向nil的指针;

其中nil is zero typed as id

NULL is zero typed as void*

重要的一点是你不能发送消息到NULL。 所以在许多地方最好在objective-C中使用nil。

他们几乎是一样的事情,除了,

nil用于Objective-C风格。 其中NULL是Ctypes的指针,并且被定义为(void *)