Junior — Middle
Όλοι οι τύποι δεδομένων που αποθηκεύουν τιμές χρησιμοποιούν απαραίτητα τον μηχανισμό αντιγραφής κατά την ανάθεση ή τη μεταβίβαση;
sobes.tech AI
Απάντηση από AI
Δεν χρησιμοποιούν όλοι οι τύποι δεδομένων μηχανισμό αντιγραφής κατά την ανάθεση ή τη μεταφορά. Στο iOS (και Swift), διακρίνονται οι τύποι αξίας (value types) και οι τύποι αναφοράς (reference types).
- Τύποι αξίας (π.χ. δομές, enumerations, βασικοί τύποι όπως το Int, Double) αντιγράφονται κατά την ανάθεση ή τη μεταφορά — δημιουργείται ένα νέο αντίγραφο των δεδομένων.
- Τύποι αναφοράς (π.χ. κλάσεις) αντιγράφουν μόνο την αναφορά στο αντικείμενο, όχι το ίδιο το αντικείμενο. Έτσι, πολλές μεταβλητές μπορούν να δείχνουν στο ίδιο αντικείμενο στη μνήμη.
Παράδειγμα σε Swift:
struct Point { var x: Int; var y: Int }
class Person { var name: String
init(name: String) { self.name = name }
}
var p1 = Point(x: 0, y: 0)
var p2 = p1 // αντιγραφή της τιμής
p2.x = 10
print(p1.x) // 0
var person1 = Person(name: "Alice")
var person2 = person1 // αντιγραφή της αναφοράς
person2.name = "Bob"
print(person1.name) // Bob
Επομένως, ο μηχανισμός αντιγραφής εφαρμόζεται μόνο στους τύπους αξίας, ενώ οι τύποι αναφοράς χρησιμοποιούν τη μεταφορά αναφοράς.