Sobes.tech
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, αποτρέποντας διαρροές μνήμης.