Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
NSMutableString

In manchen Situationen kann es nötig sein, einen Text zu verändern, ohne dass ein neues Objekt angelegt wird. Zum Beispiel, wenn mehrere Zeiger auf den gleichen Speicherplatz verweisen. Für diese Zwecke gibt es NSMutableString, eine von NSString abgeleitete Klasse. Probieren Sie folgenden Code im Debugger und Sie werden sehen, dass sich die Speicheradresse nicht ändert.
NSMutableString *textstring = [NSMutableString stringWithCapacity:5];
[textstring setString:
@"Hallo Welt!"];
[textstring setString:
@"Hallo andere Welten!"];
NSLog(
@"%@",textstring);
Wie Sie im Code sehen, wird dieser NSMutableStrings etwas anders erzeugt, nämlich indem man die Methode stringWithCapacity verwendet. Dabei ist die Anfangsgröße (Capacity) aber keineswegs die maximale Größe. Setzen Sie einen längeren Text, wird auch mehr Speicherplatz in Anspruch genommen.Die Capacity dient lediglich der Speicherplatzoptimierung.

Auch das Verändern des gespeicherten Textes unterscheidet sich von einem NSString, und geschieht durch die setString-Methode. Einfache Zuweisung eines neuen Textes funktioniert zwar auch, erzeugen dann aber ein neues NSString Objekt. Probieren Sie folgenden Code und beobachten Sie die Speicherstelle der Variable. Sie wird sich verändern, wenn Sie den Text nur durch Zuweisung ändern. Ein anschließender Aufruf der setString-Methode wird das Programm zum Absturz bringen, da es sich an dieser Stelle dann nicht mehr um ein NSMutableString handelt. In Xcode 3.2 wird Sie auch der Compiler über diesen Umstand informieren.
NSMutableString *textstring = [NSMutableString stringWithCapacity:5];
[textstring setString:
@"Hallo Welt!"];
textstring =
@"Test";
[textstring setString:
@"Hallo andere Welten!"];
NSLog(
@"%@",textstring);
stacks_image_869B53B9-1271-475E-8FD7-7EC92AE9CC1D
Es ist möglich, und durchaus nicht ungewöhnlich, zwei oder mehr Zeiger auf die gleiche Speicherstelle zeigen zu lassen. Im nachfolgenden Programm werden zwei NSMutableString Objekte erzeugt, die anfangs unabhängig existieren. Nach einer einfachen Zuweisung zeigen beide Objekte auf die gleiche Speicherstelle. Veränderungen an myText1 sind automatisch auch Veränderungen an myText2, denn es handelt sich dabei um den selben Speicherplatz. Solch eine Gleichsetzung von Zeigern kann sehr praktisch sein, ist aber nicht ohne weiteres wieder trennbar.
stacks_image_2E326ABB-2D7F-40F3-8987-1C30E0273EF2