Sobes.tech
Junior — Middle

Da li ste koristili referencijalne promenljive tipa Unowned u svojim projektima?

sobes.tech АИ

Одговор од АИ

Da, u iOS projektima sam koristio referencijalne promenljive tipa unowned.

unowned je vrsta slabe reference koja ne povećava brojač referenci, ali pretpostavlja da će objekat na koji se odnosi uvek postojati tokom korišćenja te reference.

Ovo je korisno za sprečavanje cikličnih jakih referenci, na primer, u zatvaranjima ili kod međusobnih referenci između objekata, kada jedan objekat garantuje da će duže živeti od drugog.

Primer korišćenja unowned u zatvaranju:

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

Ovde je tenant deklarisan kao unowned, jer stan ne bi smeo da postoji bez stanara, čime se sprečava ciklička jaka referenca.