Middle
Ką reiškia, kad reikšmės tipas (value type) priklauso nuorodos tipui (reference type)?
sobes.tech AI
Atsakymas iš AI
Vertės tipo reikšmė kopijuojama priskyrimo ar perduodant į funkciją, o nuorodos tipas perduodamas nuoroda, tai yra, kopijuojamas nuorodos į esamą egzempliorių.
Reikšmių tipai (Value Types):
- Struktūros (struct)
- Enumai (enum)
- Tūpiai (tuple)
- Dauguma pagrindinių tipų (Int, String, Bool, Array, Dictionary, Set ir kt.)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // kopijuojama p1 reikšmė į p2
p2.x = 10
// p1.x vis dar 1, p2.x tapo 10
print("p1: \(p1.x)")
print("p2: \(p2.x)")
Nuorodų tipai (Reference Types):
- Klasės (class)
- Funkcijos (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 nurodo tą patį egzempliorių kaip ir c1
c2.x = 10
// c1.x taip pat tapo 10
print("c1: \(c1.x)")
print("c2: \(c2.x)")
Pagrindiniai skirtumai:
| Charakteristika | Reikšmės tipas (Value Type) | Nuorodos tipas (Reference Type) |
|---|---|---|
| Priskyrimas | Reikšmės kopijavimas | Nuorodos (rodyklės) kopijavimas |
| Atmintis | Skiriama stack'e (paprastiems atvejams) | Skiriama heap'e |
| Bendras naudojimas | Kiekviena kintamoji turi savo kopiją | Keletas kintamųjų gali nurodyti tą patį egzempliorių |
| Mutabilumas | Keisti reikia keisti kopiją | Keitimas per vieną nuorodą matomas visiems kitiems |
iOS kūrime dažnai naudojami abu tipai. Žinant jų skirtumus, galima pasirinkti tinkamą tipą konkrečiam uždaviniui ir išvengti nepageidaujamų šalutinių efektų, ypač dirbant su mutabiliais duomenimis.