Odpowiedzi:
nil
powinno 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
).
context
na observeValueForKeyPath:ofObject:change:context:
to void *
, że nie oznacza to, że dane przekazywane jak context
może być wskaźnik obiekt? Myślę, że to częsty przypadek. Dlatego jestem zdezorientowany, dlaczego dokumenty zawsze używają NULL
zamiast 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:
nil
czego użyć doid
typu (i wskaźników do obiektów).NULL
właśnie tego używaszvoid *
.0
.Zazwyczaj używam wariantu, który pasuje do języka, w którym deklarowany jest typ .
NULL
jest C equivalent
od 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:
nil
jest używany w stylu Objective-C. gdzie NULL
jest dla wskaźników typu C i jest typdef'ed do (void *)
.