Sobes.tech
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