Middle
Milline on vahe massiivi kopeerimise ja struktuuri kopeerimise vahel Swift programmeerimiskeeles?
sobes.tech AI
Vastus AI-lt
Kopeeritud struktuur on uus sõltumatu näide. Ühes struktuuris tehtud muudatused ei mõjuta teist.
Swiftis toimub massiivi (Array) kopeerimine vaikimisi "copy-on-write" (kopeerimine kirjutamise ajal) põhimõttel. See tähendab, et uue viite loomisel massiivile duplitseerimine ei toimu, kuni üks koopia ei muutu. Selleks ajaks viitavad mõlemad muutujad samadele elementidele mälus. Kui üks koopia muudetakse, luuakse uus sõltumatu andmete näide.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Struktuuri koopia. p2 on uus näide
p2.x = 10 // Muudatus p2-s ei mõjuta p1-d
print("p1: \(p1.x), \(p1.y)") // Väljund: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Väljund: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Kirjutamise ajal kopeerimine
array2[0] = 10 // Toimub tegelik andmete kopeerimine
print("array1: \(array1)") // Väljund: array1: [1, 2, 3]
print("array2: \(array2)") // Väljund: array2: [10, 2, 3]
Erinevus seisneb põhilises käitumises: struktuurid kopeeritakse alati väärtuse järgi, samas kui massiivid, olles struktuurid, rakendavad "copy-on-write" optimeerimist, mis võimaldab tõhusamat mälu haldamist mitme viitega.