Junior — Middle
Τι προκαλεί την εμφάνιση διαρροών μνήμης στις εφαρμογές;
sobes.tech AI
Απάντηση από AI
Οι διαρροές μνήμης στις εφαρμογές συμβαίνουν όταν η μνήμη που έχει εκχωρηθεί σε αντικείμενα ή δεδομένα δεν απελευθερώνεται αφού αυτά σταματήσουν να είναι απαραίτητα. Στο iOS, αυτό συχνά σχετίζεται με:
- Κυκλικούς δεσμούς μεταξύ αντικειμένων (κύκλοι διατήρησης), ειδικά κατά τη χρήση ARC (Αυτόματη Καταμέτρηση Αναφορών). Για παράδειγμα, όταν δύο αντικείμενα αναφέρονται το ένα στο άλλο με ισχυρούς δεσμούς, δεν απελευθερώνονται.
- Λανθασμένη χρήση closures, που καταγράφουν το self με ισχυρό δεσμό.
- Μη απελευθέρωση πόρων όπως χρονοδιακόπτες, παρατηρητές ή περιγραφείς αρχείων.
Παράδειγμα κύκλου διατήρησης με closure:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // το self καταγράφεται ισχυρά, δημιουργώντας κύκλο
}
}
}
Για την αποφυγή διαρροών, χρησιμοποιούνται ασθενείς (weak) ή μη κατέχοντες (unowned) δεσμούς στα closures και διασφαλίζεται η σωστή διαχείριση του κύκλου ζωής των αντικειμένων.