Junior
Mi a különbség a referencia típusok és az érték típusok között?
sobes.tech MI
Válasz az MI-től
A hivatkozás egy olyan címet tárol a memóriában, amely a tárolt adatokra mutat. Valójában a hivatkozást tároló változó csak ezt a címet birtokolja, nem magukat az adatokat. Egy referencia típusú változó hozzárendelése másolódik a hivatkozás, nem az adatok. Az adatokon végzett módosítások, amelyekre a hivatkozás mutat, minden olyan változóban megjelennek, amely ezt a hivatkozást tárolja.
Az értéktípus közvetlenül tárolja az adatokat. Egy értéktípus hozzárendelése másolódik a változóhoz, magukat az adatokat másolja. Egy értéktípusú változóban végzett módosítások nem befolyásolják a többi, ezt a másolatot kapott változót.
| Jellemző | Hivatkozási típus | Értéktípus |
|---|---|---|
| Tárolás | Adatokra mutató hivatkozás | Maga az adat |
| Hozzárendelés | A hivatkozás másolása | Az adatok másolása |
| Módosítás | Minden hivatkozást érint | Nem érinti a másolatokat |
| Elhelyezés | Heap-en | Stack-en |
| Felszabadítás | ARC / szemétgyűjtő | Automatikusan, a hatókör elhagyásakor |
| Swift példák | class, closure | struct, enum, tuple, alapvető típusok (Int, Bool, String stb.) |
// Referencia típus példája (osztály)
class ReferenceType {
var value: Int
init(value: Int) {
self.value = value
}
}
let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // A hivatkozás másolódik
ref2.value = 20 // Az adatok, amelyekre ref1 és ref2 mutat, változnak
print(ref1.value) // Kimenet: 20
print(ref2.value) // Kimenet: 20
// Értéktípus példája (struktúra)
struct ValueType {
var value: Int
}
var val1 = ValueType(value: 10)
var val2 = val1 // Az adatok másolódnak
val2.value = 20 // Csak a val2 adatai változnak
print(val1.value) // Kimenet: 10
print(val2.value) // Kimenet: 20