在observeValueForKeyPath:ofObject:change:context:
中 - 为什么文档在未指定上下文指针时会使用NULL
而不是nil
?
答案 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)
它们在技术上是相同的,仅在风格上有所不同:
nil
用于id
类型(以及指向对象的指针)。NULL
是您void *
使用的。{/ li>
0
。我通常使用与声明类型的语言相匹配的变体。
答案 3 :(得分:12)
NULL
是C 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
的典型代码。