Objective-C中的NULL与nil

时间:2009-02-17 16:14:44

标签: objective-c cocoa null

observeValueForKeyPath:ofObject:change:context:中 - 为什么文档在未指定上下文指针时会使用NULL而不是nil

5 个答案:

答案 0 :(得分:224)

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)。

答案 1 :(得分:64)

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

答案 2 :(得分:52)

它们在技术上是相同的,仅在风格上有所不同:

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

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

答案 3 :(得分:12)

NULLC equivalent nil ,指向任何内容的指针;

其中 nil is zero typed as id

<强> NULL is zero typed as void* 即可。

重要一点您无法将消息发送到NULL。因此,最好在很多地方使用物镜C中的nil。

答案 4 :(得分:3)

除了

之外,它们几乎是一样的

<script> function myFunction() { var x = "Are cookies enabled?: " + navigator.cookieEnabled; return x; } </script> 用于Objective-C样式。 其中nil用于C类型指针,并且是NULL的典型代码。