Πώς γίνεται η κατανομή και απελευθέρωση μνήμης για τύπους δεδομένων αναφοράς;
sobes.tech AI
Απάντηση από AI
Στο iOS, για τύπους αναφοράς (π.χ. κλάσεις), η μνήμη κατανεμόταν δυναμικά στη στοίβα (heap). Όταν δημιουργείται ένα αντικείμενο κλάσης, το σύστημα του αναθέτει μνήμη στη στοίβα και επιστρέφει μια αναφορά σε αυτό το αντικείμενο.
Η απελευθέρωση μνήμης γίνεται μέσω αυτόματης καταμέτρησης αναφορών (ARC — Automatic Reference Counting). Κάθε αντικείμενο διατηρεί έναν μετρητή αναφορών — τον αριθμό ενεργών αναφορών σε αυτό. Όταν δημιουργείται μια νέα αναφορά, ο μετρητής αυξάνεται, και όταν η αναφορά διαγράφεται ή γίνεται nil, μειώνεται. Όταν ο μετρητής φτάσει το μηδέν, το αντικείμενο διαγράφεται αυτόματα από τη μνήμη.
Παράδειγμα:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Иван") // μετρητής αναφορών = 1
var person2 = person1 // μετρητής αναφορών = 2
person1 = nil // μετρητής αναφορών = 1
person2 = nil // μετρητής αναφορών = 0, το αντικείμενο Person διαγράφεται από τη μνήμη
Έτσι, ο προγραμματιστής δεν χρειάζεται να ελευθερώσει χειροκίνητα τη μνήμη — το ARC το διαχειρίζεται αυτόματα.