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