Sobes.tech
Middle

Čo znamená, že typ hodnoty (value type) patrí k typu odkazu (reference type)?

sobes.tech AI

Odpoveď od AI

Hodnota typu sa kopíruje pri priradení alebo prenose do funkcie, zatiaľ čo hodnota typu odkazu sa prenáša odkazom, teda sa kopíruje ukazovateľ na existujúci príklad.

Typy hodnôt (Value Types):

  • Štruktúry (struct)
  • Enumy (enum)
  • Tuple (tuple)
  • Väčšina základných typov (Int, String, Bool, Array, Dictionary, Set atď.)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Hodnota p1 sa kopíruje do p2
p2.x = 10

// p1.x je stále 1, p2.x sa stal 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Typy odkazov (Reference Types):

  • Triedy (class)
  • Funkcie (closure)
class Coordinate {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 odkazuje na ten istý príklad ako c1
c2.x = 10

// c1.x je tiež 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Hlavné rozdiely:

Charakteristika Typ hodnoty (Value Type) Typ odkazu (Reference Type)
Priradenie Kopírovanie hodnoty Kopírovanie odkazu (ukazovateľa)
Pamäť Alokovaná na zásobníku (pre jednoduché prípady) Alokovaná na halde
Zdieľanie Každá premenná má vlastnú kópiu Viaceré premenné môžu odkazovať na ten istý príklad
Mutabilita Na zmenu je potrebné zmeniť kópiu Zmena cez jednu referenciu je viditeľná pre všetkých

V iOS vývoji sa oba typy často používajú. Poznanie ich rozdielov vám umožní vybrať vhodný typ pre konkrétnu úlohu a vyhnúť sa nechceným vedľajším efektom, najmä pri práci s mutovateľnými dátami.