Sobes.tech
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.