Sobes.tech
Middle

Οι τυπικές συλλογές πίνακα είναι τύποι τιμών και τύποι αναφοράς;

sobes.tech AI

Απάντηση από AI

Οι πίνακες (Array) στο Swift είναι δομές (struct), και οι δομές είναι τύποι τιμών (Value Types). Κατά την ανάθεση ή τη μεταβίβαση ενός πίνακα, δημιουργείται ένα αντίγραφο αυτού.

Ωστόσο, για βελτιστοποίηση της απόδοσης, το σύστημα αντιγραφής των πινάκων έχει μια συμπεριφορά Copy-on-Write. Αυτό σημαίνει ότι το πραγματικό αντίγραφο των δεδομένων του πίνακα συμβαίνει μόνο κατά την πρώτη τροποποίηση ενός από τα αντίγραφα. Μέχρι τότε, και τα δύο αντίγραφα μοιράζονται την ίδια αποθήκευση δεδομένων.

Τύποι τιμών: Struct, Enum, Int, String, Double, Bool. Τύποι αναφοράς: Class, Function, Closure.

Παράδειγμα που απεικονίζει το Copy-on-Write:

var initialArray = [1, 2, 3]
var copiedArray = initialArray // Δεν υπάρχει ακόμα πραγματικό αντίγραφο δεδομένων

print(initialArray[0]) // 1
print(copiedArray[0])  // 1

copiedArray[0] = 10     // Εδώ γίνεται το πραγματικό αντίγραφο δεδομένων

print(initialArray[0]) // 1 (το αρχικό array δεν άλλαξε)
print(copiedArray[0])  // 10 (μόνο η αντιγραμμένη έκδοση άλλαξε)