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) αναφορές.