在 observeValueForKeyPath:ofObject:change:context:中-为什么在没有指定上下文指针的情况下,文档使用 NULL而不是 nil?
observeValueForKeyPath:ofObject:change:context:
NULL
nil
它们在技术上是相同的(0) ,但是 nil 通常用于 Objective-C 对象类型,而 NULL 用于 c 样式的指针(void *)。
nil应该只用于代替 id,我们 Java 和 C + + 程序员会认为这是一个指向对象的指针。对非对象指针使用 NULL。
id
看看这个方法的声明:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
上下文是 void *(即 C 样式的指针) ,因此您肯定会使用 NULL(有时声明为 (void *)0)而不是 nil(类型为 id)。
void *
(void *)0
它们在技术上是一样的,只是风格不同:
0
我通常使用与类型为 声明的语言匹配的变体。
NULL是 nil的 C equivalent,是一个空指针;
C equivalent
其中 nil is zero typed as id,
nil is zero typed as id
NULL is zero typed as void* .
NULL is zero typed as void*
有一点很重要: 不能将消息发送到 NULL。因此,在 Objective-C 中很多地方都倾向于使用 nil。
它们几乎是一样的,除了,
nil以 Objective-C 风格使用。 其中 NULL用于 C 类型指针,并被类型定义为 (void *)。
(void *)