Ποια είναι η διαφορά στη χρήση των λέξεων-κλειδιών 'unowned' και 'strong' κατά την δήλωση αναφορών στο Swift;
sobes.tech AI
Απάντηση από AI
Στη Swift, οι λέξεις-κλειδιά strong και unowned χρησιμοποιούνται για τη διαχείριση των αναφορών και την αποτροπή κύκλων διατήρησης (retain cycles).
-
strong — είναι μια τυπική ισχυρή αναφορά που αυξάνει τον μετρητή αναφορών του αντικειμένου. Όσο υπάρχει τουλάχιστον μια ισχυρή αναφορά, το αντικείμενο δεν θα διαγραφεί από τη μνήμη.
-
unowned — είναι μια αδύναμη, αλλά μη προαιρετική αναφορά. Δεν αυξάνει τον μετρητή αναφορών, αλλά υποθέτει ότι το αντικείμενο στο οποίο αναφέρεται υπάρχει πάντα κατά τη διάρκεια χρήσης αυτής της αναφοράς. Αν το αντικείμενο έχει ήδη διαγραφεί, η πρόσβαση στην αναφορά
unownedθα προκαλέσει σφάλμα κατά την εκτέλεση.
Παράδειγμα:
class Person {
var apartment: Apartment?
}
class Apartment {
unowned let tenant: Person
init(tenant: Person) {
self.tenant = tenant
}
}
let john = Person()
let apt = Apartment(tenant: john)
john.apartment = apt
Εδώ, η tenant δηλώνεται ως unowned επειδή το διαμέρισμα δεν πρέπει να διατηρεί το άτομο με μια ισχυρή αναφορά, για να αποφευχθεί ένας κύκλος, αλλά υποτίθεται ότι το άτομο υπάρχει περισσότερο από το διαμέρισμα.