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 ( idtypes)。
它们在技术上是相同的东西(0),但是nil通常用于Objective-C对象types,而NULL用于c样式指针(void *)。
他们在技术上是相同的,只是风格不同:
- Objective-C风格说,
nil是什么用于idtypes(和指向对象)。 - 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 *) 。