NSString *myString = @"sample string";
NSString *newString = [myString copy];
Wenn ich nach diesen beiden Zeilen einen Haltepunkt setze, ist der Zeiger für myString derselbe wie der Zeiger für newString.
WTF? Sollte NSString copy nicht einen Zeiger auf ein neues Objekt zurückgeben? Oder übersehe ich etwas Grundlegendes darüber, wie copy funktionieren soll?
0 Stimmen
Ich kenne die Antwort nicht, aber wenn Sie myString ändern, dann haben beide unterschiedliche Adressen... bis der Inhalt der Zeichenfolge gleich ist, ist es in der gleichen Adresse...
2 Stimmen
Erstens: Sie haben nicht copy, sondern stringWithString: aufgerufen. Zweitens: Da Strings unveränderlich sind, nehmen der Compiler und die Laufzeitumgebung Optimierungen vor. Normalerweise werden unveränderliche Objekte mit einer zusätzlichen Anzahl von Referenzen zurückgegeben, anstatt ein neues Objekt zu erstellen.
0 Stimmen
Die Schönheit des Kakaos - keine Kopien von Daten erstellen, wenn sie nicht benötigt werden ...
0 Stimmen
Ups, sorry, das hätte eine Kopie sein sollen (ich habe verschiedene Versionen getestet und die falsche eingefügt). Das Verhalten ist jedoch dasselbe.
0 Stimmen
@JasonCoco Aber es ist eine "Optimierung" des Rahmens, da
NSString
ist eine "normale" Klasse, kein eingebauter Typ.