Ich habe viele Beiträge hier auf Stack Overflow gesehen, die Objective-C-Benutzer davor warnen, Objekte nicht mit dem ==
-Operator zu vergleichen. Zum Beispiel wird das Folgende immer abgeraten.
if (string1 == string2) {} // string1 und string2 sind beide vom Typ NSString *
Ich verstehe diese Warnung so, dass der ==
-Operator in diesem Fall die Pointer-Gleichheit überprüft und nicht die tatsächlichen Werte von string1
und string2
. Wenn das der Fall ist, warum sehe ich dann so oft Leute, die ihre Objekte mit nil
mit dem ==
-Operator vergleichen. Ich habe zum Beispiel das Folgende mehrmals gesehen.
if (obj == nil) {} // obj ist vom Typ id oder ein anderes Objekt
Wenn das Vergleichen von Zeigern mit dem ==
-Operator bei Dingen wie NSString
s (oder NSNumber
s oder NSArray
s etc.) schlechte Praxis ist, warum ist es dann so verbreitet bei nil
.
Ist dies der Standard, weil es nur eine Art von nil
gibt, d.h.: nil
ist immer gleich nil
?
Warum werden direkte Vergleiche mit dem ==
-Operator zwischen Objekten missbilligt, aber toleriert, wenn sie mit nil
verglichen werden?
Vielen Dank für Ihre Zeit.