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