Junior
Wat is het verschil tussen referentietypen en waarde typen?
sobes.tech AI
Antwoord van AI
Verwijzing slaat een adres in het geheugen op dat wijst naar de gegevens die daar zijn opgeslagen. In feite bezit de variabele die de verwijzing opslaat alleen dat adres, niet de gegevens zelf. Het toewijzen van een referentietype aan een variabele kopieert de verwijzing, niet de gegevens. Wijzigingen in de gegevens waar de verwijzing naar wijst, worden weerspiegeld in alle variabelen die deze verwijzing opslaan.
Het waarde-type slaat direct de gegevens op. Het toewijzen van een waarde-type aan een variabele kopieert de gegevens zelf. Wijzigingen in een waarde-type variabele beïnvloeden andere variabelen die deze kopie hebben ontvangen niet.
| Kenmerk | Referentietype | Waarde-type |
|---|---|---|
| Opslag | Verwijzing naar gegevens | De gegevens zelf |
| Toewijzing | Kopie van de verwijzing | Kopie van de gegevens |
| Wijziging | Heeft invloed op alle verwijzingen | Heeft geen invloed op kopieën |
| Plaatsing | In de heap | In de stack |
| Vrijgave | ARC / garbage collector | Automatisch bij het verlaten van de scope |
| Voorbeelden in Swift | class, closure | struct, enum, tuple, basistypen (Int, Bool, String, etc.) |
// Voorbeeld van een referentietype (klasse)
class ReferenceType {
var value: Int
init(value: Int) {
self.value = value
}
}
let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // De verwijzing wordt gekopieerd
ref2.value = 20 // De gegevens waar ref1 en ref2 naar wijzen, veranderen
print(ref1.value) // Uitvoer: 20
print(ref2.value) // Uitvoer: 20
// Voorbeeld van een waardetype (structuur)
struct ValueType {
var value: Int
}
var val1 = ValueType(value: 10)
var val2 = val1 // De gegevens worden gekopieerd
val2.value = 20 // Alleen de gegevens in val2 veranderen
print(val1.value) // Uitvoer: 10
print(val2.value) // Uitvoer: 20