Junior
Τι είναι μια διαρροή μνήμης και πώς συμβαίνει;
sobes.tech AI
Απάντηση από AI
Μια διαρροή μνήμης είναι μια κατάσταση όπου ένα πρόγραμμα δεσμεύει μνήμη για αντικείμενα, αλλά μετά το πέρας της χρήσης τους, οι αναφορές σε αυτά δεν διαγράφονται και ο συλλέκτης απορριμμάτων δεν μπορεί να ελευθερώσει αυτήν τη μνήμη. Στο iOS, όπου χρησιμοποιείται το ARC (Αυτόματη Καταμέτρηση Αναφορών), οι διαρροές μνήμης συχνά συμβαίνουν λόγω κυκλικών αναφορών, για παράδειγμα όταν δύο αντικείμενα αναφέρονται το ένα στο άλλο μέσω ισχυρών αναφορών, και κανένα από αυτά δεν απελευθερώνεται.
Παράδειγμα κυκλικής αναφοράς σε Swift:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a
// Και τα δύο αντικείμενα αναφέρονται το ένα στο άλλο, το ARC δεν μπορεί να τα ελευθερώσει αυτόματα
Για την αποφυγή διαρροών, χρησιμοποιούνται ασθενείς (weak) ή χωρίς ιδιοκτήτη (unowned) αναφορές, που δεν αυξάνουν τον μετρητή αναφορών και επιτρέπουν την σωστή απελευθέρωση των αντικειμένων.