W observeValueForKeyPath:ofObject:change:context:
- dlaczego dokumenty używają NULL
zamiast nil
nie określać wskaźnika kontekstu?
objective-c
cocoa
null
erikprice
źródło
źródło
Odpowiedzi:
nil
powinno się go używać zamiast zamiast tegoid
, 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:
Kontekst jest
void *
(tzn. Wskaźnikiem w stylu C), więc zdecydowanie użyłbyśNULL
(co czasem jest deklarowane jako(void *)0
) zamiastnil
(który jest typuid
).źródło
context
naobserveValueForKeyPath:ofObject:change:context:
tovoid *
, że nie oznacza to, że dane przekazywane jakcontext
może być wskaźnik obiekt? Myślę, że to częsty przypadek. Dlatego jestem zdezorientowany, dlaczego dokumenty zawsze używająNULL
zamiastnil
.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 *).
źródło
NULL
jest inaczej zdefiniowany niżnil
.nil
jest zdefiniowany jako(id)0
.NULL
nie jest.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 .
źródło
NULL
jestC equivalent
odnil
, 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.
źródło
Są prawie takie same, z wyjątkiem:
nil
jest używany w stylu Objective-C. gdzieNULL
jest dla wskaźników typu C i jest typdef'ed do(void *)
.źródło