Sobes.tech
Junior — Middle

Μπορείς να εξηγήσεις ποιοι τύποι διαρροών μνήμης υπάρχουν στις εφαρμογές;

sobes.tech AI

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

Στις εφαρμογές iOS, οι κύριοι τύποι διαρροών μνήμης σχετίζονται με λανθασμένη διαχείριση των αναφορών στα αντικείμενα:

  • Ισχυκοί κύκλοι αναφορών (Strong Reference Cycles) — όταν δύο αντικείμενα έχουν ισχυρές αναφορές το ένα στο άλλο και κανένα από αυτά δεν μπορεί να απελευθερωθεί.
  • Διαρροές λόγω κλεισίματος (Closures) — αν ένα κλείσιμο καταγράφει το self με ισχυρή αναφορά, αυτό μπορεί να οδηγήσει σε κύκλο αναφορών.
  • Μη απελευθερωμένοι πόροι — αντικείμενα που δεν απελευθερώνονται λόγω έλλειψης κλήσης της deinit ή λανθασμένης χρήσης.

Παράδειγμα ισχυρού κύκλου αναφορών:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // ισχυρός κύκλος αναφορών

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