Sobes.tech
Junior — Middle

Γιατί συνιστάται η χρήση μιας αδύναμης αναφοράς στον εαυτό (weak self) στον κώδικα που χρησιμοποιεί closures;

sobes.tech AI

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

Η χρήση αδύναμων αναφορών (weak self) σε closures είναι απαραίτητη για την αποτροπή κύκλων ισχυρών αναφορών (retain cycles), που οδηγούν σε διαρροές μνήμης.

Όταν ένα closure καταγράφει το self ως αδύναμη αναφορά, και το self περιέχει αυτό το closure (π.χ., σε μια ιδιότητα), κρατούν το ένα το άλλο, και κανένα από τα αντικείμενα δεν απελευθερώνεται.

Παράδειγμα χρήσης αδύναμης αναφοράς:

someAsyncCall { [weak self] in
    guard let self = self else { return }
    self.doSomething()
}

Εδώ, το self καταγράφεται αδύναμα, οπότε αν το αντικείμενο self καταστραφεί πριν την εκτέλεση του closure, το closure δεν θα το διατηρεί στη μνήμη, αποτρέποντας διαρροή.