Sobes.tech
Middle

Γιατί είναι απαραίτητα τα ισχυρά αναφορές στη γλώσσα προγραμματισμού Swift;

sobes.tech AI

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

Οι ισχυρές αναφορές (strong references) στην Swift είναι απαραίτητες ώστε ένα αντικείμενο να παραμένει στη μνήμη όσο υπάρχει τουλάχιστον μία ισχυρή αναφορά σε αυτό. Είναι η προεπιλεγμένη συμπεριφορά για τους τύπους αναφοράς (κλάσεις).

Όταν μια μεταβλητή ή σταθερά αναφέρεται σε ένα στιγμιότυπο κλάσης, αυτή η αναφορά είναι από προεπιλογή ισχυρή. Αυτό αυξάνει τον μετρητή αναφορών (reference count) για αυτό το στιγμιότυπο. Μόλις όλες οι ισχυρές αναφορές στο στιγμιότυπο σταματήσουν να υπάρχουν (π.χ., όταν οι μεταβλητές βγουν από το πεδίο ορατότητας ή τους δοθεί nil), ο μετρητής αναφορών φτάνει στο μηδέν, και το σύστημα διαχείρισης μνήμης (ARC - Αυτόματη Μέτρηση Αναφορών) ελευθερώνει τη μνήμη που καταλαμβάνει αυτό το στιγμιότυπο.

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

Ωστόσο, οι ισχυρές αναφορές μπορούν να οδηγήσουν σε κύκλους αναφορών (retain cycle), όταν δύο ή περισσότερα αντικείμενα έχουν ισχυρές αναφορές το ένα στο άλλο, και κανένα από αυτά δεν μπορεί να αποδεσμευτεί, ακόμα και αν δεν υπάρχουν άλλες εξωτερικές αναφορές σε αυτά. Για την αποφυγή τέτοιων κύκλων, χρησιμοποιούνται αδύναμες (weak) και χωρίς ιδιοκτήτη (unowned) αναφορές.