Πώς διακρίνουμε τους τύπους δεδομένων που βασίζονται σε αναφορές από τους τύπους δεδομένων που αποθηκεύουν τιμές άμεσα;
sobes.tech AI
Απάντηση από AI
Στο iOS (Swift και Objective-C), οι τύποι δεδομένων χωρίζονται σε τιμές τύπων (value types) και τύπους αναφοράς (reference types).
-
Τύποι τιμών αποθηκεύουν τα δεδομένα άμεσα. Κατά την ανάθεση ή την περασμένη σε μια συνάρτηση, δημιουργείται ένα αντίγραφο των δεδομένων. Στο Swift, αυτοί περιλαμβάνουν δομές (
struct), enumerations (enum) και βασικούς τύπους όπωςInt,Double,Bool. -
Τύποι αναφοράς αποθηκεύουν μια αναφορά σε μια περιοχή μνήμης όπου βρίσκονται τα δεδομένα. Κατά την ανάθεση, αντιγράφεται η αναφορά, όχι τα δεδομένα. Οι αλλαγές μέσω μιας αναφοράς είναι ορατές και από άλλες. Στο Swift, αυτοί είναι οι κλάσεις (
class).
Πώς να τα διακρίνετε:
- Στο Swift, αν ένας τύπος δηλωθεί ως
structήenum, είναι τύπος τιμής. - Αν δηλωθεί ως
class, είναι τύπος αναφοράς.
Παράδειγμα:
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 - και οι δύο μεταβλητές αναφέρονται στο ίδιο αντικείμενο
Έτσι, με την παρατήρηση της συμπεριφοράς κατά την ανάθεση και την αλλαγή, μπορείτε να διακρίνετε τους τύπους που βασίζονται σε αναφορές από εκείνους που αποθηκεύουν τιμές άμεσα.