[objective-c] Objective-C에서 NULL 대 nil

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 equivalentnil아무것도에 대한 포인터는;

여기서 nil is zero typed as id,

NULL is zero typed as void*.

한 가지 중요한 점 은 NULL로 메시지를 보낼 수 없습니다. 따라서 objective-C에서는 여러 위치에서 nil을 사용하는 것이 좋습니다.


답변

그들은 거의 같은 것을 제외하고는

nilObjective-C 스타일로 사용됩니다. NULLC 유형 포인터의 위치 는 다음과 같습니다 (void *).


답변