Sobes.tech
Junior — Middle

Πώς απελευθερώνεται η μνήμη που καταλαμβάνει ένα αντικείμενο σε ένα πρόγραμμα;

sobes.tech AI

Απάντηση από AI

Στο iOS, η απελευθέρωση μνήμης συμβαίνει κυρίως αυτόματα χάρη στο σύστημα ARC (Automatic Reference Counting). Κάθε αντικείμενο έχει έναν μετρητή αναφορών, ο οποίος αυξάνεται κατά τη δημιουργία μιας νέας ισχυρής αναφοράς και μειώνεται κατά την διαγραφή της. Όταν ο μετρητής φτάσει στο μηδέν, το αντικείμενο καταστρέφεται αυτόματα και η μνήμη απελευθερώνεται.

Αν στον κώδικα υπάρχουν κυκλικές αναφορές (π.χ., δύο αντικείμενα με ισχυρές αναφορές το ένα στο άλλο), η μνήμη δεν απελευθερώνεται. Για την επίλυση αυτού του προβλήματος, χρησιμοποιούνται αδύναμες (weak) ή χωρίς ιδιοκτήτη (unowned) αναφορές.

Παράδειγμα:

class Person {
    var name: String
    weak var apartment: Apartment? // αδύναμη αναφορά για αποφυγή κύκλου
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // αναφορά χωρίς ιδιοκτήτη
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Έτσι, η απελευθέρωση μνήμης συμβαίνει αυτόματα αν διαχειρίζεστε σωστά τις αναφορές.