Junior — Middle
Είναι δυνατόν να υλοποιηθεί ένας μηχανισμός που παρακολουθεί αντικείμενα με τη βοήθεια αδύναμων αναφορών, χωρίς να εμποδίζει τη διαγραφή τους από τον συλλέκτη απορριμμάτων;
sobes.tech AI
Απάντηση από AI
Ναι, στο iOS (και στο Swift) υπάρχει ένας μηχανισμός αδύναμων αναφορών (weak references), που επιτρέπει την παρακολούθηση αντικειμένων χωρίς να τα διατηρεί στη μνήμη και να αποτρέψει την διαγραφή τους από τον συλλέκτη απορριμμάτων (ARC).
Μια αδύναμη αναφορά δεν αυξάνει τον μετρητή αναφορών του αντικειμένου, οπότε όταν δεν υπάρχουν ισχυρές αναφορές, το αντικείμενο απελευθερώνεται από τη μνήμη.
Παράδειγμα χρήσης αδύναμης αναφοράς σε Swift:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // αδύναμη αναφορά
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // το αντικείμενο Person θα διαγραφεί, καθώς δεν υπάρχουν ισχυρές αναφορές
print(apartment?.tenant) // nil
Έτσι, οι αδύναμες αναφορές επιτρέπουν την παρακολούθηση αντικειμένων χωρίς να εμποδίζουν τη διαγραφή τους.