에 observeValueForKeyPath:ofObject:change:context:
– 왜 문서를 사용하지 NULL
않고 nil
컨텍스트 포인터를 지정하지 않을 경우?
답변
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
.
답변
그것들은 기술적으로 같은 (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을 사용하는 것이 좋습니다.
답변
그들은 거의 같은 것을 제외하고는
nil
Objective-C 스타일로 사용됩니다. NULL
C 유형 포인터의 위치 는 다음과 같습니다 (void *)
.