Sobes.tech
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 καταγράφεται ως ασθενής αναφορά για να αποφευχθεί ένας κύκλος διατήρησης μεταξύ του χρονοδιακόπτη και του ελεγκτή.