Sobes.tech
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), αποθηκεύει ισχυρές αναφορές σε αυτές τις περιπτώσεις.