Sobes.tech
Junior — Middle

Πώς μπορούμε να απαλλαγούμε από κυκλικές αναφορές στη διαχείριση μνήμης για να αποφύγουμε διαρροές;

sobes.tech AI

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

Οι κυκλικοί σύνδεσμοι συμβαίνουν όταν δύο ή περισσότερα αντικείμενα αναφέρονται το ένα στο άλλο, εμποδίζοντας την αυτόματη απελευθέρωση μνήμης, ειδικά κατά τη χρήση καταμέτρησης αναφορών.

Στο iOS (Objective-C/Swift), για την αποτροπή διαρροών μνήμης λόγω κυκλικών συνδέσμων, χρησιμοποιούνται:

  • Αδύναμοι σύνδεσμοι (weak) — δεν αυξάνουν τον μετρητή αναφορών, μηδενίζονται αυτόματα όταν το αντικείμενο διαγράφεται.
  • Ανεξάρτητοι σύνδεσμοι (unowned) — δεν αυξάνουν τον μετρητή, αλλά δεν μηδενίζονται, χρησιμοποιούνται όταν το αντικείμενο υπάρχει εγγυημένα.

Για παράδειγμα, σε Swift:

class A {
    var b: B?
}

class B {
    weak var a: A?  // αδύναμος σύνδεσμος για αποφυγή κύκλου
}

Η χρήση του weak ή unowned διακόπτει τον κύκλο, επιτρέποντας στο ARC να ελευθερώσει σωστά τα αντικείμενα και να αποτρέψει διαρροές μνήμης.