Sobes.tech
Junior — Middle

Použili jste ve svých projektech referenční proměnné typu Unowned?

sobes.tech AI

Odpověď od AI

Ano, v projektech iOS jsem používal referenční proměnné typu unowned.

unowned je typ slabé reference, který nezvyšuje čítač referencí, ale předpokládá, že odkazovaný objekt bude vždy existovat během používání této reference.

To je užitečné pro prevenci silných referenčních cyklů, například v uzávěrech nebo při vzájemných odkazech mezi objekty, když jeden objekt zaručuje, že bude žít déle než jiný.

Příklad použití unowned v uzávěru:

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

Zde je tenant deklarován jako unowned, protože byt nesmí existovat bez nájemce, což zabraňuje cyklu silných referencí.