Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Στην iOS, η απελευθέρωση της μνήμης των αντικειμένων γίνεται κυρίως μέσω του μηχανισμού ARC (Αυτόματη Καταμέτρηση Αναφορών).

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

Παράδειγμα:

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

var person1: Person? = Person(name: "Alex") // μετρητής αναφορών = 1
var person2 = person1 // μετρητής αναφορών = 2
person1 = nil // μετρητής αναφορών = 1
person2 = nil // μετρητής αναφορών = 0, το αντικείμενο απελευθερώνεται

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