Sobes.tech
Junior

Koja je razlika između referentnih i vrednosnih tipova?

sobes.tech АИ

Одговор од АИ

Referenca čuva adresu u memoriji koja ukazuje na podatke koji su tamo smešteni. U stvari, promenljiva koja čuva referencu poseduje samo tu adresu, a ne same podatke. Dodeljivanjem referentnog tipa promenljivoj, kopira se referenca, a ne podaci. Promene u podacima na koje referenca ukazuje odražavaju se u svim promenljivima koje čuvaju tu referencu.

Tip vrednosti direktno čuva podatke. Dodeljivanjem tipa vrednosti promenljivoj, kopiraju se sami podaci. Promene u jednoj promenljivoj tipa vrednosti ne utiču na druge promenljive koje su dobile tu kopiju.

Osobina Referentni tip Tip vrednosti
Skladištenje Referenca na podatke Sami podaci
Dodeljivanje Kopiranje reference Kopiranje podataka
Izmena Utiče na sve reference Ne utiče na kopije
Lokacija U heap-u U steku
Oslobađanje ARC / sakupljač smeća Automatski pri izlasku iz opsega
Primeri u Swift-u class, closure struct, enum, tuple, osnovni tipovi (Int, Bool, String itd.)
// Primer referentnog tipa (klasa)
class ReferenceType {
    var value: Int
    init(value: Int) {
        self.value = value
    }
}

let ref1 = ReferenceType(value: 10)
let ref2 = ref1 // Kopira se referenca
ref2.value = 20 // Podaci na koje ukazuju ref1 i ref2 se menjaju
print(ref1.value) // Izlaz: 20
print(ref2.value) // Izlaz: 20

// Primer tipa vrednosti (struktura)
struct ValueType {
    var value: Int
}

var val1 = ValueType(value: 10)
var val2 = val1 // Podaci se kopiraju
val2.value = 20 // Menjaju se samo podaci u val2
print(val1.value) // Izlaz: 10
print(val2.value) // Izlaz: 20