에 observeValueForKeyPath:ofObject:change:context:– 왜 문서를 사용하지 NULL않고 nil컨텍스트 포인터를 지정하지 않을 경우?
답변
nilidJava 및 C ++ 프로그래머가 객체에 대한 포인터로 생각하는 것 대신에 사용해야 합니다. 사용 NULL되지 않은 객체 포인터에 대해.
해당 메소드의 선언을보십시오.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
컨텍스트는 void *(즉, C 스타일 포인터)이므로 (유형 인 ) 대신 ( NULL때로는로 선언 됨 (void *)0) nil을 사용합니다 id.
답변
그것들은 기술적으로 같은 (0)이지만 nil은 일반적으로 Objective-C 객체 유형에 사용되며 NULL은 c 스타일 포인터 (void *)에 사용됩니다.
답변
그것들은 기술적으로 같은 것이며 스타일 만 다릅니다 :
- Objective-C 스타일은 유형 (및 객체에 대한 포인터)에
nil사용할 것을 말합니다id. - C 스타일
NULL은 그것이 당신이 사용하는 것이라고 말합니다void *. - C ++ 스타일은 일반적으로 그냥 사용해야한다고 말합니다
0.
나는 일반적으로 형식이 선언 된 언어와 일치하는 변형을 사용합니다 .
답변
NULL는 IS C equivalent의 nil아무것도에 대한 포인터는;
여기서 nil is zero typed as id,
NULL is zero typed as void*.
한 가지 중요한 점 은 NULL로 메시지를 보낼 수 없습니다. 따라서 objective-C에서는 여러 위치에서 nil을 사용하는 것이 좋습니다.
답변
그들은 거의 같은 것을 제외하고는
nilObjective-C 스타일로 사용됩니다. NULLC 유형 포인터의 위치 는 다음과 같습니다 (void *).
답변
