Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε τι σημαίνει ο όρος 'Unowned' στο πλαίσιο της διαχείρισης μνήμης;

sobes.tech AI

Απάντηση από AI

Στο πλαίσιο διαχείρισης μνήμης στο iOS (και Swift), ο όρος "Unowned" σημαίνει μια αδύναμη αναφορά σε ένα αντικείμενο που δεν αυξάνει τον μετρητή αναφορών (retain count), αλλά υποθέτει ότι το αντικείμενο υπάρχει κατά τη διάρκεια της χρήσης αυτής της αναφοράς.

Διαφορές με το weak:

  • Η αναφορά weak μπορεί να γίνει nil αν το αντικείμενο διαγραφεί, και γι' αυτό δηλώνεται ως προαιρετική.
  • Η αναφορά unowned δεν είναι προαιρετική και δεν ρυθμίζεται αυτόματα σε nil. Αν το αντικείμενο στο οποίο αναφέρεται το unowned διαγραφεί, η πρόσβαση σε αυτό θα προκαλέσει σφάλμα κατά την εκτέλεση (crash).

Χρησιμοποιείται όταν διασφαλίζεται ότι η διάρκεια ζωής του αντικειμένου που αναφέρεται είναι μεγαλύτερη ή ίση με τη διάρκεια ζωής της αναφοράς.

Παράδειγμα:

class Owner {
    var pet: Pet?
}

class Pet {
    unowned let owner: Owner
    init(owner: Owner) {
        self.owner = owner
    }
}

let owner = Owner()
owner.pet = Pet(owner: owner)

Εδώ, το Pet διατηρεί μια αναφορά unowned στον Owner, υποθέτοντας ότι ο Owner ζει περισσότερο από το Pet.