Sobes.tech
Middle

Mit jelent, hogy az értéktípus (value type) a referencia típushoz (reference type) tartozik?

sobes.tech MI

Válasz az MI-től

Az érték típus másolódik érték hozzárendelésekor vagy függvénybe való átadáskor, míg a referencia típus referencián keresztül kerül átadásra, azaz a létező példányra mutató mutató másolódik.

Érték típusok (Value Types):

  • Struktúrák (struct)
  • Enumerációk (enum)
  • Tuple (tuple)
  • A legtöbb alapvető típus (Int, String, Bool, Array, Dictionary, Set stb.)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p1 értéke másolódik p2-be
p2.x = 10

// p1.x még mindig 1, p2.x 10 lett
print("p1: \(p1.x)")
print("p2: \(p2.x)")

Referencia típusok (Reference Types):

  • Osztályok (class)
  • Függvények (closure-k)
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 ugyanarra az példányra mutat
c2.x = 10

// c1.x is ugyanúgy 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")

Fő különbségek:

Jellemző Érték típus (Value Type) Referencia típus (Reference Type)
Hozzárendelés Érték másolása Referencia másolása (mutató)
Memória A veremben foglal helyet (egyszerű esetekben) A halomban foglal helyet
Megosztás Minden változó saját másolatot tartalmaz Több változó hivatkozhat ugyanarra az példányra
Módosíthatóság A módosításhoz a másolatot kell módosítani Egy referencia által végrehajtott változtatás mindenki számára látható

Az iOS fejlesztésben mindkét típus gyakran használt. A különbségek ismeretében kiválaszthatod a feladathoz legmegfelelőbb típust, és elkerülheted a nem kívánt mellékhatásokat, különösen mutálható adatokkal való munkánál.