Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε τον μηχανισμό συλλογής απορριμμάτων στο Swift και πώς διαχειρίζεται τη μνήμη;

sobes.tech AI

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

Στη Swift δεν υπάρχει κλασικός συλλέκτης αποβλήτων (Garbage Collector), όπως σε ορισμένες άλλες γλώσσες. Αντ' αυτού, χρησιμοποιείται ένας μηχανισμός αυτόματης καταμέτρησης αναφορών (ARC - Automatic Reference Counting).

Το ARC λειτουργεί ως εξής: κάθε αντικείμενο στη μνήμη έχει έναν μετρητή αναφορών, ο οποίος αυξάνεται κατά τη δημιουργία μιας νέας αναφοράς στο αντικείμενο και μειώνεται όταν η αναφορά διαγράφεται ή γίνεται nil. Όταν ο μετρητής αναφορών ενός αντικειμένου φτάσει στο μηδέν, το αντικείμενο διαγράφεται αυτόματα από τη μνήμη.

Παράδειγμα:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "Иван")
var person2 = person1 // ο μετρητής αναφορών αυξάνεται
person1 = nil // ο μετρητής μειώνεται, αλλά το αντικείμενο παραμένει ζωντανό, επειδή το person2 αναφέρεται σε αυτό
person2 = nil // ο μετρητής γίνεται 0 και το αντικείμενο διαγράφεται

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