Sobes.tech
Junior — Middle

Ποια βήματα πρέπει να ακολουθηθούν για να προκληθεί ένας κύκλος διατήρησης (Retain Cycle) στη μνήμη;

sobes.tech AI

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

Ο κύκλος διατήρησης (Retain Cycle) στο iOS συμβαίνει όταν δύο ή περισσότερα αντικείμενα διατηρούν το ένα το άλλο μέσω ισχυρών αναφορών, εμποδίζοντας την απελευθέρωσή τους από τη μνήμη, προκαλώντας διαρροή.

Για να προκύψει ένας κύκλος διατήρησης, απαιτούνται τα εξής βήματα:

  1. Το αντικείμενο A περιέχει μια ισχυρή αναφορά στο αντικείμενο B.
  2. Το αντικείμενο B περιέχει μια ισχυρή αναφορά στο αντικείμενο A.
  3. Κανένα από τα αντικείμενα δεν απελευθερώνεται, καθώς ο μετρητής αναφορών δεν φτάνει το μηδέν.

Παράδειγμα:

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?
}

Έτσι, ο κύκλος διατήρησης προκύπτει όταν υπάρχουν αμοιβαίες ισχυρές αναφορές χωρίς διακοπή, εμποδίζοντας την απελευθέρωση των αντικειμένων.