Junior — Middle
Ποια είναι η διαφορά μεταξύ των τύπων αναφορών Strong και Weak στη διαχείριση μνήμης και το μοντέλο αναφορών;
sobes.tech AI
Απάντηση από AI
Strong-σύνδεσμος — είναι ένας κανονικός ισχυρός σύνδεσμος σε ένα αντικείμενο, ο οποίος αυξάνει τον μετρητή αναφορών (retention count) αυτού του αντικειμένου. Όσο υπάρχει τουλάχιστον ένας ισχυρός σύνδεσμος, το αντικείμενο δεν θα διαγραφεί από τη μνήμη.
Weak-σύνδεσμος — είναι ένας αδύναμος σύνδεσμος, ο οποίος δεν αυξάνει τον μετρητή αναφορών του αντικειμένου. Χρησιμοποιείται για την αποφυγή κυκλικών αναφορών (retain cycles). Αν το αντικείμενο στο οποίο αναφέρεται ο weak-σύνδεσμος διαγραφεί, ο weak-σύνδεσμος αυτόματα γίνεται nil.
Παράδειγμα σε Swift:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // weak σύνδεσμος για αποφυγή κύκλων
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // weak-σύνδεσμος
Εδώ, ο weak-σύνδεσμος tenant δεν διατηρεί το αντικείμενο Person, αποτρέποντας διαρροές μνήμης.