Sobes.tech
Junior — Middle

V jaké situaci je vhodnější používat weak nebo unowned pro správu paměti v týmu vývojářů?

sobes.tech AI

Odpověď od AI

V iOS pro správu paměti pomocí ARC (Automatické počítání referencí) se používají slabé (weak) a nezabezpečené (unowned) odkazy, aby se zabránilo cyklům udržování objektů.

  • weak se používá, když odkaz může v určitém okamžiku stát nil, tj. objekt, na který odkazuje, může být odstraněn. Slabý odkaz se automaticky nastaví na nil při uvolnění objektu. To je vhodné, když vztah není povinný a objekt může zmizet.

  • unowned se používá, když odkaz musí vždy ukazovat na existující objekt a nemůže být nil. Pokud je objekt uvolněn a unowned odkaz zůstane, dojde k chybě za běhu. Obvykle se unowned používá, když je životní cyklus odkazovaného objektu zaručeně delší než životní cyklus vlastníka odkazu.

Příklad:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent? // weak, protože parent může být dříve odstraněn
}

// Nebo

class Customer {
    let card: CreditCard
    init() {
        card = CreditCard(customer: self)
    }
}

class CreditCard {
    unowned let customer: Customer // unowned, protože karta nemůže existovat bez zákazníka
    init(customer: Customer) {
        self.customer = customer
    }
}

Shrnutí:

  • Použijte weak, když odkaz může být nil a chcete se vyhnout cyklům udržování.
  • Použijte unowned, když odkaz musí být vždy platný a objekt existuje déle než odkaz.