Junior — Middle
Σε ποιες περιπτώσεις είναι προτιμότερο να χρησιμοποιείτε μια αδύναμη αναφορά (weak var) στο Swift;
sobes.tech AI
Απάντηση από AI
Οι ασθενείς αναφορές (weak var) στη Swift χρησιμοποιούνται για την αποτροπή κύκλων ισχυρών αναφορών (retain cycles), που οδηγούν σε διαρροές μνήμης. Συνιστάται η χρήση ασθενών αναφορών στις ακόλουθες περιπτώσεις:
- Όταν το αντικείμενο A αναφέρεται στο αντικείμενο B, και το αντικείμενο B αναφέρεται πίσω στο αντικείμενο A, και μία από αυτές τις αναφορές πρέπει να είναι ασθενής για να αποφευχθεί ένας κύκλος.
- Στους διαμεσολαβητές (delegates), όπου ο διαμεσολαβητής δηλώνεται συνήθως ως weak, ώστε να μην διατηρεί το αντικείμενο διαμεσολαβητή στη μνήμη.
Παράδειγμα:
class ViewController: UIViewController {
var timer: Timer?
func startTimer() {
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in
self?.updateUI()
}
}
func updateUI() {
// ενημέρωση διεπαφής
}
}
Εδώ, το self καταγράφεται ως ασθενής αναφορά για να αποφευχθεί ένας κύκλος διατήρησης μεταξύ του χρονοδιακόπτη και του ελεγκτή.