Junior
Ποια είναι η διαφορά μεταξύ τύπων αναφοράς και τύπων τιμής;
sobes.tech AI
Απάντηση από AI
Τύποι Αξίας (Value Types) αντιγράφονται κατά την ανάθεση ή τη μεταβίβαση σε μια συνάρτηση. Κάθε περίπτωση έχει το δικό της αντίγραφο δεδομένων.
Τύποι Αναφοράς (Reference Types), κατά την ανάθεση ή τη μεταβίβαση σε μια συνάρτηση, περνούν μια αναφορά στην ίδια περίπτωση δεδομένων. Οι αλλαγές στα δεδομένα μέσω μιας αναφοράς θα αντικατοπτρίζονται σε όλες τις άλλες αναφορές σε αυτήν την ίδια περίπτωση.
| Χαρακτηριστικό | Τύπος Αξίας (Value Type) | Τύπος Αναφοράς (Reference Type) |
|---|---|---|
| Συμπεριφορά κατά την ανάθεση/μεταβίβαση | Αντιγραφή | Μεταβίβαση αναφοράς |
| Τοποθεσία στη μνήμη | Στοίβα (Heap) | Στοίβα (Stack) |
| Διαχείριση μνήμης | Αυτόματη (μέσω στοίβας) | Αυτόματη (ARC) |
| Παραδείγματα σε Swift | struct, enum, tuple |
class, func, closure |
// Παράδειγμα Τύπου Αξίας (Struct)
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 λαμβάνει ένα αντίγραφο του p1
p2.x = 10 // Η αλλαγή στο p2 δεν επηρεάζει το p1
print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)
// Παράδειγμα Τύπου Αναφοράς (Κλάση)
class Coordinate {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var c1 = Coordinate(x: 1, y: 2)
var c2 = c1 // c2 αναφέρεται στο ίδιο αντικείμενο με το c1
c2.x = 10 // Η αλλαγή στο c2 επηρεάζει το c1, καθώς και οι δύο αναφέρονται στο ίδιο αντικείμενο
print("c1: \(c1.x)") // c1: 10
print("c2: \(c2.x)") // c2: 10