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" оптимизациясын ишке ашырып, көп шилтемелерде эс тутумду натыйжалуу башкарууга мүмкүндүк берет.