Σε ποιες περιπτώσεις πρέπει να χρησιμοποιείται μια αδύναμη (weak) αναφορά μέσα σε ένα κλείσιμο (closure);
sobes.tech AI
Απάντηση από AI
Οι ασθενείς αναφορές (weak) μέσα σε κλεισίματα (closures) στο iOS χρησιμοποιούνται για την αποτροπή κυκλικών ισχυρών αναφορών (retain cycles), που μπορούν να οδηγήσουν σε διαρροές μνήμης. Αυτό είναι γενικά σημαντικό όταν ένα κλείσιμο καταγράφει ένα αντικείμενο (π.χ., self) και διατηρείται από αυτό, δημιουργώντας μια αμοιβαία ισχυρή αναφορά.
Χρησιμοποιήστε το weak για να αναφερθείτε στο self μέσα σε ένα κλείσιμο αν το κλείσιμο αποθηκεύεται ως ιδιότητα του αντικειμένου ή μπορεί να ζήσει περισσότερο από την κλήση της λειτουργίας, ώστε να αποφευχθεί η διατήρηση του αντικειμένου στη μνήμη μετά την απελευθέρωσή του.
Παράδειγμα σε Swift:
class ViewController {
var completion: (() -> Void)?
func setup() {
completion = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Ενέργεια εκτελέστηκε")
}
}
Εδώ, το [weak self] αποτρέπει έναν ισχυρό κύκλο μεταξύ του ViewController και του κλεισίματος completion.