Sobes.tech
Junior — Middle

Wie unterscheidet man referenzbasierte Datentypen von Datentypen, die Werte direkt speichern?

sobes.tech KI

Antwort von AI

In iOS (Swift und Objective-C) werden Datentypen in Wertetypen (value types) und Referenztypen (reference types) unterteilt.

  • Wertetypen speichern die Daten direkt. Beim Zuweisen oder Übergabe an eine Funktion wird eine Kopie der Daten erstellt. In Swift gehören dazu Strukturen (struct), Aufzählungen (enum) sowie Basistypen wie Int, Double, Bool.

  • Referenztypen speichern eine Referenz auf einen Speicherbereich, in dem die Daten liegen. Beim Zuweisen wird die Referenz kopiert, nicht die Daten selbst. Änderungen über eine Referenz sind in anderen sichtbar. In Swift sind das Klassen (class).

So erkennt man sie:

  • In Swift ist ein Typ, der als struct oder enum deklariert ist, ein Wertetyp.
  • Ist er als class deklariert, ist es ein Referenztyp.

Beispiel:

struct Point {
    var x: Int
    var y: Int
}

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var p1 = Point(x: 0, y: 0)
var p2 = p1
p2.x = 10
print(p1.x) // 0 - die Kopie hat sich nicht geändert

var person1 = Person(name: "Alice")
var person2 = person1
person2.name = "Bob"
print(person1.name) // Bob - beide Variablen verweisen auf dasselbe Objekt

Auf diese Weise kann man anhand des Verhaltens bei Zuweisung und Änderung die auf Referenzen basierenden Typen von den direkt Wert speichernden Typen unterscheiden.