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.