Middle
Πώς μπορούμε να αποθηκεύσουμε αντικείμενα κλάσεων σε έναν πίνακα με ισχυρή αναφορά;
sobes.tech AI
Απάντηση από AI
Τα αντικείμενα κλάσης σε έναν πίνακα αποθηκεύονται από προεπιλογή στη Swift μέσω ισχυρών αναφορών, εάν ο πίνακας περιέχει στοιχεία τύπου κλάσης. Ένας πίνακας [MyClass] ή Array<MyClass> θα περιέχει ισχυρές αναφορές στις περιπτώσεις MyClass.
Παράδειγμα:
class MyClass {
let id: Int
init(id: Int) {
self.id = id
print("MyClass \(id) δημιουργήθηκε")
}
deinit {
print("MyClass \(id) απελευθερώθηκε")
}
}
var ισχυρέςΑναφορέςΠίνακας: [MyClass] = []
for i in 0..<3 {
let obj = MyClass(id: i)
ισχυρέςΑναφορέςΠίνακας.append(obj) // Ο πίνακας διατηρεί ισχυρές αναφορές
}
print("Ο πίνακας έχει \(ισχυρέςΑναφορέςΠίνακας.count) στοιχεία")
// Τα αντικείμενα δεν θα διατεθούν μέχρι να υπάρχουν ισχυρές αναφορές στον πίνακα
// Ανάθεση `nil` στον πίνακα ή διαγραφή στοιχείων θα οδηγήσει σε απελευθέρωση,
// αν δεν υπάρχουν άλλες ισχυρές αναφορές.
// ισχυρέςΑναφορέςΠίνακας = [] // Παράδειγμα απελευθέρωσης όλων των ισχυρών αναφορών
// ισχυρέςΑναφορέςΠίνακας.remove(at: 0) // Παράδειγμα απελευθέρωσης μίας ισχυρής αναφοράς
Στη Swift, οι πίνακες τιμών (struct) ή οι πίνακες enumeration (enum) αποθηκεύουν αντίγραφα των στοιχείων τους. Ωστόσο, αν ο πίνακας περιέχει περιπτώσεις κλάσεων (class), αποθηκεύει ισχυρές αναφορές σε αυτές τις περιπτώσεις.