Sobes.tech
Junior — Middle

Czy używałeś w swoich projektach zmiennych referencyjnych typu Unowned?

sobes.tech AI

Odpowiedź od AI

Tak, w projektach iOS używałem zmiennych referencyjnych typu unowned.

unowned to rodzaj słabej referencji, która nie zwiększa licznika referencji, ale zakłada, że obiekt, na który się odnosi, zawsze będzie istniał podczas korzystania z tej referencji.

Jest to przydatne do zapobiegania cyklom silnych referencji, na przykład w zamknięciach lub przy wzajemnych odniesieniach między obiektami, gdy jeden obiekt gwarantuje, że będzie żył dłużej niż inny.

Przykład użycia unowned w zamknięciu:

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

Tutaj tenant jest zadeklarowany jako unowned, ponieważ mieszkanie nie powinno istnieć bez najemcy, co zapobiega cyklowi silnych referencji.