답변:
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
의가 observeValueForKeyPath:ofObject:change:context:
있다 void *
,하지 않습니다 그로 전달 된 데이터가 있음을 의미 context
객체 포인터가 될 수 있을까? 나는 일반적인 경우라고 생각합니다. 그렇기 때문에 문서가 항상 NULL
대신 사용 하는 이유에 대해 혼란 스럽습니다 nil
.
그것들은 기술적으로 같은 (0)이지만 nil은 일반적으로 Objective-C 객체 유형에 사용되며 NULL은 c 스타일 포인터 (void *)에 사용됩니다.
NULL
는 IS C equivalent
의 nil
아무것도에 대한 포인터는;
여기서 nil is zero typed as id
,
NULL is zero typed as void*
.
한 가지 중요한 점 은 NULL로 메시지를 보낼 수 없습니다. 따라서 objective-C에서는 여러 위치에서 nil을 사용하는 것이 좋습니다.