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.