Ich bin neu in der objektorientierten Programmierung, und ein Konzept, das mich lange beschäftigt hat, ist Unveränderlichkeit. Ich glaube, die Glühbirne ist letzte Nacht ausgegangen, aber ich möchte Folgendes überprüfen:
Wenn ich auf Aussagen stoße, dass ein unveränderliches Objekt nicht geändert werden kann, bin ich verwirrt, weil ich zum Beispiel Folgendes tun kann:
NSString *myName = @"Bob";
myName = @"Mike";
Dort habe ich gerade meinen Namen vom unveränderlichen Typ NSString geändert. Mein Problem ist, dass sich das Wort "Objekt" auf das physische Objekt im Speicher oder die Abstraktion "meinName" beziehen kann. Die erstere Definition gilt für den Begriff der Unveränderlichkeit.
Was die Variable betrifft, so ist eine (für mich) klarere Definition der Unveränderlichkeit, dass der Wert eines unveränderlichen Objekts nur geändert werden kann, indem auch seine Position im Speicher, dh seine Referenz (auch als Zeiger bezeichnet), geändert wird.
Ist das richtig oder bin ich noch im Wald verloren?
NSString
, es ist ein " Zeiger auf undNSString
", der nicht unveränderlich ist. Ich weiß nichts über Ziel C, aber ich vermute in Ihrem Beispiel,@"Mike"
dass eine neue Instanz von erstelltNSString
und dem Zeiger zugewiesen wirdmyName
. Sie haben also nicht das Objekt geändert, auf das verwiesenmyName
wurde, sondern nur das, auf das verwiesen wurde.