Middle
Фарқи байни нусхагирии массив ва нусхагирии структура дар забони барномасозии Swift чист?
sobes.tech AI
Ҷавоб аз AI
Қайталанған құрылым жаңа тәуелсіз мысал болып табылады. Бір құрылымдағы өзгерістер басқаға әсер етпейді.
Swift-те массивтің (Array) көшіруі әдепкі бойынша "жазу кезінде көшіру" (copy-on-write) принципімен жүзеге асырылады. Бұл дегеніміз, жаңа сілтеме массивке жасалғанда, деректер көбейтілмейді, егер бір көшірме өзгертілмесе. Осы уақытқа дейін екі өзгергіш бірдей жады элементтеріне сілтеме жасайды. Бір көшірме өзгертілгенде, жаңа тәуелсіз деректер мысалы жасалады.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Құрылымның көшірмесі. p2 жаңа мысал
p2.x = 10 // p2-дағы өзгеріс p1-ге әсер етпейді
print("p1: \(p1.x), \(p1.y)") // Шығу: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Шығу: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Жазу кезінде көшіру
array2[0] = 10 // Деректердің нақты көшірмесі орындалады
print("array1: \(array1)") // Шығу: array1: [1, 2, 3]
print("array2: \(array2)") // Шығу: array2: [10, 2, 3]
Айырмашылық негізгі мінез-құлықта жатыр: құрылымдар әрқашан мән бойынша көшіріледі, ал массивтер, құрылымдар болғандықтан, "copy-on-write" оңтайландыруын жүзеге асырады, бұл бірнеше сілтемелер кезінде жадыны тиімді басқаруға мүмкіндік береді.