Sobes.tech
Junior

Koje su razlike između tipova vrednosti i referentnih tipova u programskom jeziku Swift?

sobes.tech АИ

Одговор од АИ

Tipovi vrednosti (Value Types) i referentni tipovi (Reference Types) razlikuju se u načinu na koji skladište i prenose podatke.

Tipovi vrednosti:

  • Dodeljivanje kreira nezavisnu kopiju podataka.
  • Podaci se direktno skladište na mestu deklaracije ili na steku (za lokalne promenljive).
  • Strukture, enumeracije i tuple-ovi su tipovi vrednosti.
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 0, y: 0)
var p2 = p1 // Kreira se kopija p1
p2.x = 10

print(p1.x) // 0
print(p2.x) // 10 - p1 se nije promenio

Referentni tipovi:

  • Dodeljivanje kreira novu referencu na iste podatke.
  • Podaci se skladište u hrpi, a referenca na njih je na mestu deklaracije ili na steku.
  • Klase su referentni tipovi.
class Rect {
    var width: Int
    var height: Int

    init(width: Int, height: Int) {
        self.width = width
        self.height = height
    }
}

var r1 = Rect(width: 10, height: 20)
var r2 = r1 // r2 sada referiše na isti objekat kao i r1
r2.width = 30

print(r1.width) // 30 - r1 se promenio, jer r2 referiše na isti objekat
print(r2.width) // 30

Glavne razlike u tabeli:

Karakteristika Tipovi vrednosti (Value Types) Tipovi referenci (Reference Types)
Dodeljivanje Kopira podatke Kopira referencu
Skladištenje podataka Na mestu deklaracije / Stek U hrpi (referenca na mestu deklaracije)
Bezbednost niti Podrazumevano sigurni za niti Zahtevaju sinhronizaciju za niti
Tipovi Struct, Enum, Tuple, Array, Dict Class, Function, Closure

Izbor između tipova zavisi od zadatka: za prikaz jednostavnih nezavisnih podataka, preferiraju se Tipovi vrednosti, dok za objekte sa zajedničkom promenljivom i nasleđivanjem - Tipovi referenci (klase). Korišćenje Tipova vrednosti može poboljšati performanse smanjenjem opterećenja na hrpu i pojednostavljenjem upravljanja memorijom.