Sobes.tech
Junior

Mi a különbség a referencia típusok és az érték típusok között?

sobes.tech MI

Válasz az MI-től

Értéktípusok (Value Types) másolódnak értékadás vagy függvényhívás során. Minden példány saját adatmásolatával rendelkezik.

Referencia típusok (Reference Types) értékadás vagy függvényhívás során ugyanarra az adatpéldányra mutató hivatkozást adnak át. Az egyik hivatkozáson keresztüli adatváltoztatás minden más hivatkozásban is megjelenik ugyanarra az adatpéldányra.

Jellemző Értéktípus (Value Type) Referencia típus (Reference Type)
Viselkedés átadás/értékadás során Másolás Hivatkozás átadása
Memória helye Verem (Heap) Halom (Stack)
Memóriakezelés Automatikus (verem által) Automatikus (ARC)
Swift példák struct, enum, tuple class, func, closure
// Értéktípus példája (Struct)
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 másolatot kap p1-ről
p2.x = 10   // A p2 változtatása nem befolyásolja p1-et
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

// Referencia típus példája (Osztály)
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 objektumra mutat
c2.x = 10   // A c2 változtatása hatással van c1-re, mivel ugyanarra az objektumra mutat
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10