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
}
}
Έτσι, η απελευθέρωση μνήμης συμβαίνει αυτόματα αν διαχειρίζεστε σωστά τις αναφορές.