Junior
Was sind die Unterschiede zwischen Werttypen und Referenztypen in der Programmiersprache Swift?
sobes.tech KI
Antwort von AI
Werttypen (Value Types) und Referenztypen (Reference Types) unterscheiden sich in der Art und Weise, wie sie Daten speichern und übertragen.
Werttypen:
- Zuweisung erstellt eine unabhängige Kopie der Daten.
- Daten werden direkt am Ort der Deklaration oder im Stack gespeichert (für lokale Variablen).
- Strukturen, Aufzählungen und Tupel sind Werttypen.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 0, y: 0)
var p2 = p1 // Kopie von p1 wird erstellt
p2.x = 10
print(p1.x) // 0
print(p2.x) // 10 - p1 hat sich nicht geändert
Referenztypen:
- Zuweisung erstellt eine neue Referenz auf die gleichen Daten.
- Daten werden im Heap gespeichert, und die Referenz darauf befindet sich am Ort der Deklaration oder im Stack.
- Klassen sind Referenztypen.
class Rect {
var width: Int
var height: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
}
}
var r1 = Rect(width: 10, height: 20)
var r2 = r1 // r2 verweist jetzt auf dasselbe Objekt wie r1
r2.width = 30
print(r1.width) // 30 - r1 hat sich geändert, da r2 auf dasselbe Objekt verweist
print(r2.width) // 30
Hauptunterschiede in der Tabelle:
| Merkmal | Werttypen (Value Types) | Referenztypen (Reference Types) |
|---|---|---|
| Zuweisung | Kopiert die Daten | Kopiert die Referenz |
| Datenspeicherung | Am Ort der Deklaration / Stack | Im Heap (Referenz am Ort der Deklaration) |
| Thread-Sicherheit | Standardmäßig thread-sicher | Erfordern Synchronisation für Threads |
| Typen | Struct, Enum, Tuple, Array, Dict | Class, Function, Closure |
Die Wahl zwischen den Typen hängt von der Aufgabe ab: Für die Darstellung einfacher, unabhängiger Daten sind Werttypen vorzuziehen, für Objekte mit einer gemeinsamen, veränderlichen Entität und Vererbung - Referenztypen (Klassen). Die Verwendung von Werttypen kann die Leistung verbessern, indem die Last auf den Heap reduziert und die Speicherverwaltung vereinfacht wird.