Sobes.tech
Junior

Wat zijn de verschillen tussen waarde- en referentietypen in de programmeertaal Swift?

sobes.tech AI

Antwoord van AI

Waarden (Value Types) en referentietypen (Reference Types) verschillen in de manier waarop ze gegevens opslaan en doorgeven.

Waarden:

  • Toewijzing maakt een onafhankelijke kopie van de gegevens.
  • Gegevens worden direct opgeslagen op de plaats van declaratie of op de stack (voor lokale variabelen).
  • Structuren, enumeraties en tuples zijn waardetypen.
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 0, y: 0)
var p2 = p1 // Er wordt een kopie van p1 gemaakt
p2.x = 10

print(p1.x) // 0
print(p2.x) // 10 - p1 is niet veranderd

Referentietypen:

  • Toewijzing creëert een nieuwe verwijzing naar dezelfde gegevens.
  • Gegevens worden opgeslagen in de heap, en de verwijzing ernaar bevindt zich op de plaats van declaratie of op de stack.
  • Klassen zijn referentietypen.
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 verwijst nu naar hetzelfde object als r1
r2.width = 30

print(r1.width) // 30 - r1 is veranderd omdat r2 naar hetzelfde object verwijst
print(r2.width) // 30

Belangrijkste verschillen in de tabel:

Kenmerk Waardetypen (Value Types) Referentietypen (Reference Types)
Toewijzing Kopieert de gegevens Kopieert de verwijzing
Gegevensopslag Op de plaats van declaratie / Stack In de heap (verwijzing op de plaats van declaratie)
Threadveiligheid Standaard threadveilig Vereist synchronisatie voor threads
Types Struct, Enum, Tuple, Array, Dict Class, Function, Closure

De keuze tussen de typen hangt af van de taak: voor het weergeven van eenvoudige, onafhankelijke gegevens, zijn waardetypen de voorkeur, voor objecten met een gedeelde, wijzigbare entiteit en erfelijkheid - referentietypen (klassen). Het gebruik van waardetypen kan de prestaties verbeteren door de belasting op de heap te verminderen en het geheugenbeheer te vereenvoudigen.