In observeValueForKeyPath:ofObject:change:context:
- warum werden die Dokumente verwendet, NULL
anstatt nil
keinen Kontextzeiger anzugeben?
objective-c
cocoa
null
erikprice
quelle
quelle
Antworten:
nil
sollte nur anstelle von verwendet werdenid
, was wir Java- und C ++ - Programmierer als Zeiger auf ein Objekt betrachten würden. VerwendungNULL
für Nicht-Objekt-Zeiger.Schauen Sie sich die Deklaration dieser Methode an:
Der Kontext ist ein
void *
(dh ein Zeiger im C-Stil), daher würden Sie definitivNULL
(was manchmal als deklariert wird(void *)0
) anstelle vonnil
(was vom Typ istid
) verwenden.quelle
context
inobserveValueForKeyPath:ofObject:change:context:
ist ? Ich würde denken, dass dies ein häufiger Fall ist. Deshalb bin ich verwirrt darüber, warum die Dokumente immer statt verwenden .void *
context
NULL
nil
Sie sind technisch identisch (0), aber nil wird normalerweise für einen Objective-C-Objekttyp verwendet, während NULL für Zeiger im C-Stil (void *) verwendet wird.
quelle
NULL
ist anders definiert alsnil
.nil
ist definiert als(id)0
.NULL
ist nicht.Sie sind technisch gleich und unterscheiden sich nur im Stil:
nil
gibt an, was für denid
Typ (und Zeiger auf Objekte) verwendet werden soll.NULL
Sie dafür verwendenvoid *
.0
.Normalerweise verwende ich die Variante, die der Sprache entspricht, in der der Typ deklariert ist .
quelle
NULL
ist dasC equivalent
vonnil
, ein Zeiger auf nichts;wo
nil is zero typed as id
,NULL is zero typed as void*
.Ein wichtiger Punkt, an den Sie keine Nachricht an NULL senden können. Daher wird an vielen Stellen bevorzugt Null in Objektiv C verwendet.
quelle
Sie sind fast dasselbe, außer:
nil
wird in einem Objective-C-Stil verwendet. woNULL
ist für Zeiger vom Typ C und ist typdefiniert für(void *)
.quelle