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.