Junior — Middle
Ar visi duomenų tipai, kurie saugo reikšmes, privalo naudoti kopijavimo mechanizmą priskyrimo ar perdavimo metu?
sobes.tech AI
Atsakymas iš AI
Visi duomenų tipai nenaudoja kopijavimo mechanizmo priskyrimo ar perdavimo metu. iOS (ir Swift) skiria reikšmės tipus (value types) ir nuorodų tipus (reference types).
- Reikšmės tipai (pvz., struktūros, išvardijimai, pagrindiniai tipai kaip Int, Double) kopijuojami priskyrimo ar perdavimo metu — sukuriama nauja duomenų kopija.
- Nuorodų tipai (pvz., klasės) kopijuoja tik nuorodą į objektą, o ne patį objektą. Taip keli kintamieji gali nurodyti į tą patį objektą atmintyje.
Pavyzdys Swift:
struct Point { var x: Int; var y: Int }
class Person { var name: String
init(name: String) { self.name = name }
}
var p1 = Point(x: 0, y: 0)
var p2 = p1 // kopijuojama reikšmė
p2.x = 10
print(p1.x) // 0
var person1 = Person(name: "Alice")
var person2 = person1 // kopijuojama nuoroda
person2.name = "Bob"
print(person1.name) // Bob
Todėl kopijavimo mechanizmas taikomas tik reikšmės tipams, o nuorodų tipai naudoja nuorodų perdavimą.