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.