objective-c - _nullable - objective c optional property




Objective-C에서 NULL 대 vs nil (4)

observeValueForKeyPath:ofObject:change:context: - 문맥 포인터를 지정하지 않을 때 문서에서 nil 대신 NULL 을 사용하는 이유는 무엇입니까?


그것들은 기술적으로 똑같은 것이지만 (0) Objective-C 객체 유형에는 일반적으로 nil이 사용되고 C 스타일 포인터 (void *)에는 NULL이 사용됩니다.


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

nil 은 Objective-C 스타일로 사용됩니다. 여기서 NULL 은 C 타입 포인터를위한 것이고 typdef'ed (void *) 이다.


NULL 은 아무것도 가리 키지 않는 C equivalentnil C equivalent .

여기서 nil is zero typed as id .

NULL is zero typed as void* 입니다. NULL is zero typed as void* .

한 가지 중요한 점 은 NULL에 메시지를 보낼 수 없다는 것입니다. 따라서 많은 곳에서 objective-C에서 nil을 사용하는 것이 바람직합니다.


nilid 대신에 사용해야 nil Java와 C ++ 프로그래머는 객체에 대한 포인터라고 생각할 것입니다. 객체가 아닌 포인터에는 NULL 을 사용하십시오.

그 방법의 선언을 보라.

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
    change:(NSDictionary *)change context:(void *)context

컨텍스트는 void * (즉, C 스타일 포인터)이므로 nil ( id 유형 임)이 아닌 NULL (때때로 (void *)0 으로 선언되는)을 사용해야 NULL .







null