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
)而不是nil
( id
types)。
它们在技术上是相同的东西(0),但是nil通常用于Objective-C对象types,而NULL用于c样式指针(void *)。
他们在技术上是相同的,只是风格不同:
- Objective-C风格说,
nil
是什么用于id
types(和指向对象)。 - C风格说
NULL
是用于void *
。 - C ++风格通常说你应该只使用
0
。
我通常使用与声明types的语言匹配的变体。
NULL
是nil
的C equivalent
,一个指向nil
的指针;
其中nil is zero typed as id
,
NULL is zero typed as void*
。
重要的一点是你不能发送消息到NULL。 所以在许多地方最好在objective-C中使用nil。
他们几乎是一样的事情,除了,
nil
用于Objective-C风格。 其中NULL
是Ctypes的指针,并且被定义为(void *)
。