Sobes.tech
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 και διασφαλίζεται η σωστή διαχείριση του κύκλου ζωής των αντικειμένων.