Junior — Middle
Μπορείς να δώσεις ένα παράδειγμα πότε σε ένα κλείσιμο (closure) στη Swift χρειάζεται να χρησιμοποιήσεις weak self για την αποφυγή κυκλικών αναφορών;
sobes.tech AI
Απάντηση από AI
Στα Swift, μια κυκλική αναφορά συμβαίνει όταν ένα αντικείμενο καταγράφει μια αναφορά στον εαυτό του σε μια κλείσιμο, και αυτό το κλείσιμο αποθηκεύεται στο ίδιο αντικείμενο, οδηγώντας σε αμοιβαία διατήρηση και διαρροή μνήμης. Για να το αποφύγετε, χρησιμοποιείτε το weak self.
Παράδειγμα: έχετε μια κλάση ViewController που ξεκινά μια ασύγχρονη λειτουργία με ένα κλείσιμο. Αν στο κλείσιμο χρησιμοποιήσετε άμεσα το self, τότε το ViewController θα διατηρείται από το κλείσιμο και δεν θα απελευθερωθεί μετά το κλείσιμο.
class ViewController: UIViewController {
func fetchData() {
networkRequest { [weak self] data in
guard let self = self else { return }
self.updateUI(with: data)
}
}
func updateUI(with data: Data) {
// ενημέρωση διεπαφής
}
}
Εδώ, το weak self αποτρέπει μια ισχυρή κυκλική αναφορά, καθώς το κλείσιμο καταγράφει το self ασθενώς και δεν διατηρεί το αντικείμενο, επιτρέποντάς του να απελευθερωθεί.