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" ოპტიმიზაციას, რაც უფრო ეფექტიანად მართავს მეხსიერებას მრავალი მითითების დროს.