NSString, ich bin verwirrt!

  • NSString, ich bin verwirrt!

    Hallo,

    die Doku von Apple sagt ein NSString ist unveränderlich!

    "An immutable string is a text string that is defined when it is created and subsequently cannot be changed."

    Was bedeutet das genau? Den Text kann ich doch jederzeit ändern:

    NSString *myText = @"Moin";
    myText = @"Guten Tag";
    NSLog(myText);

    Für mich ist das eine Änderung und es funktioniert ohne Probleme.
    Oder habe ich das irgendwie falsch verstanden?
  • RE: NSString, ich bin verwirrt!

    Original von Holli
    Für mich ist das eine Änderung und es funktioniert ohne Probleme.
    Oder habe ich das irgendwie falsch verstanden?

    Ja, da mit myText = @"Guten Tag"; ein neues String Objekt erzeugt und nicht der Inhalt des String Objektes verändert wird.

    Schau Dir den Code mal im Debugger an. Dann wirst Du feststellen, dass myTest nach Ausführung der 2. Zeile auf ein anderes String Objekt zeigt.
  • Richtig, nicht der Zeiger ist unveränderlich, sondern das Object.

    Du kannst an einen NSString zum Beispiel nichts anhängen. Die Methode stringByAppendingString gibt Dir auch wieder ein neues Objekt.

    Alex
    The only thing that really worried me was the ether.
  • Also lege ich mit myText = @"Guten Tag"; ein neues Objekt mit eigenem Speicherplatz an?

    So habe ich mir das schon gedacht.

    Ist ja nicht weiter tragisch, solange ich nicht noch irgendwo einen weiteren Zeiger auf die alte Speicherstelle habe.
    Jetzt wird mir alles klar.
  • Original von Holli
    Also lege ich mit myText = @"Guten Tag"; ein neues Objekt mit eigenem Speicherplatz an?

    So habe ich mir das schon gedacht.

    Ist ja nicht weiter tragisch, solange ich nicht noch irgendwo einen weiteren Zeiger auf die alte Speicherstelle habe.
    Jetzt wird mir alles klar.


    Naja, als gerade bei den Konstanten ist es wieder etwas anderes. Aber: Im Prinzip, ja.

    Alex
    The only thing that really worried me was the ether.
  • Original von Holli
    Also lege ich mit myText = @"Guten Tag"; ein neues Objekt mit eigenem Speicherplatz an?

    So habe ich mir das schon gedacht.

    Ist ja nicht weiter tragisch, solange ich nicht noch irgendwo einen weiteren Zeiger auf die alte Speicherstelle habe.

    Das wäre auch gleichgültig, da der weitere Zeiger ja auf die alte Instanz zeigen würde. Es ändern sich ja nicht alle gemeinsamen Zeiger auf einmal. Das will man meist genau so und nennt sich Kapselung.

    Original von Holli
    Jetzt wird mir alles klar.

    Dann erkläre mir das mal mit dem Sinn des Lebens.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von hns
    Original von seb2
    Original von Tom9811
    Dann erkläre mir das mal mit dem Sinn des Lebens.

    42.
    42 => "for tea two"
    swap(42) => "tea for two" oder nicht?
    -- hns

    Das passiert nur, wenn man mit Ziffern als NSString anstelle von NSNumber arbeitet. :D
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P