Antworten:
nilsollte nur anstelle von verwendet werden id, was wir Java- und C ++ - Programmierer als Zeiger auf ein Objekt betrachten würden. Verwendung NULLfü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.
contextin 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 *contextNULLnil
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:
nilgibt an, was für den idTyp (und Zeiger auf Objekte) verwendet werden soll.NULLSie dafür verwenden void *.0.Normalerweise verwende ich die Variante, die der Sprache entspricht, in der der Typ deklariert ist .
NULList das C equivalentvon 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:
nilwird in einem Objective-C-Stil verwendet. wo NULList für Zeiger vom Typ C und ist typdefiniert für (void *).