Sobes.tech
Junior — Middle

Έχετε χρησιμοποιήσει σε έργα σας μεταβλητές αναφοράς τύπου Unowned;

sobes.tech AI

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

Ναι, σε έργα iOS έχω χρησιμοποιήσει μεταβλητές αναφοράς τύπου unowned.

Το unowned είναι ένας τύπος αδύναμης αναφοράς που δεν αυξάνει τον μετρητή αναφορών, αλλά υποθέτει ότι το αντικείμενο στο οποίο αναφέρεται θα υπάρχει πάντα κατά τη διάρκεια χρήσης αυτής της αναφοράς.

Αυτό είναι χρήσιμο για την αποφυγή κύκλων ισχυρών αναφορών, για παράδειγμα, σε closures ή σε αμοιβαίες αναφορές μεταξύ αντικειμένων, όταν ένα αντικείμενο εγγυάται ότι θα ζήσει περισσότερο από ένα άλλο.

Παράδειγμα χρήσης του unowned σε ένα closure:

class Person {
    let name: String
    var apartment: Apartment?
    
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person
    
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

let john = Person(name: "John")
let apt = Apartment(unit: "4A", tenant: john)
john.apartment = apt

Εδώ, το tenant δηλώνεται ως unowned, καθώς το διαμέρισμα δεν πρέπει να υπάρχει χωρίς ενοικιαστή, και αυτό αποτρέπει έναν κύκλο ισχυρών αναφορών.