Answers:
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
)。
context
in 的类型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。