Junior — Middle
Kas kõik andmetüübid, mis salvestavad väärtusi, kasutavad kindlasti koopiamismehhanismi määramisel või edastamisel?
sobes.tech AI
Vastus AI-lt
Kõik andmetüübid ei kasuta koopiamismehhanismi määramisel või üleandmisel. iOS-is (ja Swiftis) eristatakse väärtusetüüpe (value types) ja viidetüüpe (reference types).
- Väärtusetüübid (näiteks struktuurid, loendused, põhitüübid nagu Int, Double) kopeeritakse määramisel või üleandmisel — luuakse uus andmekopeja.
- Viidetüübid (näiteks klassid) kopeerivad ainult viite objekti, mitte ise objekti. Nii võivad mitu muutujat viidata samale objektile mälus.
Näide Swiftis:
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 // kopeerib väärtuse
p2.x = 10
print(p1.x) // 0
var person1 = Person(name: "Alice")
var person2 = person1 // kopeerib viite
person2.name = "Bob"
print(person1.name) // Bob
Seega, koopiamismehhanism kehtib ainult väärtusetüüpidele, samas kui viidetüübid kasutavad viite üleandmist.