Wat is het verschil tussen het kopiëren van een array en het kopiëren van een structuur in de programmeertaal Swift?
sobes.tech AI
Antwoord van AI
De gekopieerde structuur is een nieuwe onafhankelijke instantie. Wijzigingen in één structuur beïnvloeden de andere niet.
Het kopiëren van een array (Array) in Swift gebeurt standaard als "copy-on-write" (kopiëren bij schrijven). Dit betekent dat wanneer een nieuwe referentie naar een array wordt gemaakt, de gegevens niet worden gedupliceerd totdat een van de kopieën wordt gewijzigd. Tot dat moment verwijzen beide variabelen naar dezelfde elementen in het geheugen. Wanneer een van de kopieën wordt gewijzigd, wordt een nieuwe onafhankelijke instantie van de gegevens gemaakt.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Kopie van de structuur. p2 is een nieuwe instantie
p2.x = 10 // Wijziging in p2 beïnvloedt p1 niet
print("p1: \(p1.x), \(p1.y)") // Uitvoer: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Uitvoer: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Kopie bij schrijven
array2[0] = 10 // Er vindt een daadwerkelijke kopie van de gegevens plaats
print("array1: \(array1)") // Uitvoer: array1: [1, 2, 3]
print("array2: \(array2)") // Uitvoer: array2: [10, 2, 3]
Het verschil ligt in het fundamentele gedrag: structuren worden altijd gekopieerd op waarde, terwijl arrays, zijnde structuren, de "copy-on-write" optimalisatie implementeren voor efficiënter geheugenbeheer bij meerdere referenties.