Odpowiedzi:
nilpowinno się go używać zamiast zamiast tego id, co my, programiści Java i C ++, uważalibyśmy za wskaźnik do obiektu. Posługiwać sięNULL do wskaźników niebędących obiektami.
Spójrz na deklarację tej metody:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Kontekst jest void *(tzn. Wskaźnikiem w stylu C), więc zdecydowanie użyłbyś NULL(co czasem jest deklarowane jako (void *)0) zamiast nil(który jest typu id).
contextna observeValueForKeyPath:ofObject:change:context:to void *, że nie oznacza to, że dane przekazywane jak contextmoże być wskaźnik obiekt? Myślę, że to częsty przypadek. Dlatego jestem zdezorientowany, dlaczego dokumenty zawsze używają NULLzamiast nil.
Są one technicznie takie same (0), ale zero jest zwykle używane dla typu obiektu Objective-C, podczas gdy NULL jest używane dla wskaźników typu c (void *).
Są technicznie takie same i różnią się tylko stylem:
nilczego użyć doid typu (i wskaźników do obiektów).NULLwłaśnie tego używaszvoid * .0.Zazwyczaj używam wariantu, który pasuje do języka, w którym deklarowany jest typ .
NULLjest C equivalentod nil, wskaźnik do niczego;
gdzie nil is zero typed as id,
NULL is zero typed as void*.
Jedną ważną kwestią , której nie możesz wysłać do NULL. Dlatego w wielu miejscach preferowane jest użycie wartości zero w celu C.
Są prawie takie same, z wyjątkiem:
niljest używany w stylu Objective-C. gdzie NULLjest dla wskaźników typu C i jest typdef'ed do (void *).