Sobes.tech
Junior — Middle

Ποια είναι η διαφορά στη χρήση των λέξεων-κλειδιών '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 επειδή το διαμέρισμα δεν πρέπει να διατηρεί το άτομο με μια ισχυρή αναφορά, για να αποφευχθεί ένας κύκλος, αλλά υποτίθεται ότι το άτομο υπάρχει περισσότερο από το διαμέρισμα.