Answers:
nil只能代替idJava和C ++程序员将其视为指向对象的指针使用。使用NULL非对象指针。
查看该方法的声明:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
上下文是一个void *(即C风格的指针),因此您肯定会使用NULL(有时被声明为(void *)0)而不是nil(类型为id)。
contextin 的类型observeValueForKeyPath:ofObject:change:context:是void *,这是否意味着作为传递的数据context可能是对象指针?我认为这是一个普遍的情况。这就是为什么我对为什么总是使用docs NULL而不是感到困惑的原因nil。
从技术上讲,它们是同一事物(0),但是nil通常用于Objective-C对象类型,而NULL用于c样式指针(void *)。
NULL是C equivalent的nil,一个指向什么;
其中nil is zero typed as id,
NULL is zero typed as void*。
重要的一点是您不能将消息发送到NULL。因此,最好在许多地方在目标C中使用nil。