Sobes.tech
Junior

Aký je rozdiel medzi referenčnými typmi a typmi hodnôt?

sobes.tech AI

Odpoveď od AI

Odkaz ukladá adresu v pamäti, ktorá ukazuje na údaje uložené tam. V skutočnosti vlastník premennej, ktorá ukladá odkaz, má iba túto adresu, nie samotné údaje. Priradenie referenčného typu premennej skopíruje odkaz, nie údaje. Zmeny v údajoch, na ktoré odkaz ukazuje, sa odrážajú vo všetkých premenných, ktoré tento odkaz ukladajú.

Typ hodnoty priamo ukladá údaje. Priradenie typu hodnoty premennej skopíruje samotné údaje. Zmeny v jednej premennej typu hodnoty neovplyvňujú iné premenne, ktoré dostali túto kópiu.

Vlastnosť Referenčný typ Typ hodnoty
Uloženie Odkaz na údaje Samotné údaje
Priradenie Kópia odkazu Kópia údajov
Zmena Ovplyvňuje všetky odkazy Neovplyvňuje kópie
Umiestnenie V heap-e V zásobníku
Uvoľnenie ARC / garbage collector Automaticky pri opustení rozsahu
Príklady v Swift-e class, closure struct, enum, tuple, základné typy (Int, Bool, String a pod.)
// Príklad referenčného typu (trieda)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Odkaz sa kopíruje
ref2.value = 20 // Údaje, na ktoré ukazujú ref1 a ref2, sa menia
print(ref1.value) // Výstup: 20
print(ref2.value) // Výstup: 20

// Príklad typu hodnoty (štruktúra)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Údaje sa kopírujú
val2.value = 20 // Menia sa iba údaje v val2
print(val1.value) // Výstup: 10
print(val2.value) // Výstup: 20