Antworten:
nil
sollte nur anstelle von verwendet werden id
, was wir Java- und C ++ - Programmierer als Zeiger auf ein Objekt betrachten würden. Verwendung NULL
für Nicht-Objekt-Zeiger.
Schauen Sie sich die Deklaration dieser Methode an:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Der Kontext ist ein void *
(dh ein Zeiger im C-Stil), daher würden Sie definitiv NULL
(was manchmal als deklariert wird (void *)0
) anstelle von nil
(was vom Typ ist id
) verwenden.
context
in observeValueForKeyPath: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.
Sie sind technisch gleich und unterscheiden sich nur im Stil:
nil
gibt an, was für den id
Typ (und Zeiger auf Objekte) verwendet werden soll.NULL
Sie dafür verwenden void *
.0
.Normalerweise verwende ich die Variante, die der Sprache entspricht, in der der Typ deklariert ist .
NULL
ist das C equivalent
von nil
, 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.
Sie sind fast dasselbe, außer:
nil
wird in einem Objective-C-Stil verwendet. wo NULL
ist für Zeiger vom Typ C und ist typdefiniert für (void *)
.