Em que situação é preferível usar weak ou unowned para gerir a memória numa equipa de desenvolvedores?
sobes.tech IA
Resposta da IA
No iOS, para gerir a memória com ARC (Contagem Automática de Referências), usam-se referências fracas (weak) e não seguras (unowned) para evitar ciclos de retenção de objetos.
-
weak é usado quando a referência pode tornar-se nil em algum momento, ou seja, o objeto ao qual se refere pode ser eliminado. A referência fraca é automaticamente definida como nil quando o objeto é libertado. Isto é adequado quando a relação não é obrigatória e o objeto pode desaparecer.
-
unowned é usado quando a referência deve sempre apontar para um objeto existente e não pode ser nil. Se o objeto for libertado e a referência unowned permanecer, isso causará um erro em tempo de execução. Normalmente, usa-se unowned quando o ciclo de vida do objeto referenciado é garantido que será mais longo do que o do proprietário da referência.
Exemplo:
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // weak, pois o parent pode ser eliminado antes
}
// Ou
class Customer {
let card: CreditCard
init() {
card = CreditCard(customer: self)
}
}
class CreditCard {
unowned let customer: Customer // unowned, pois o cartão não pode existir sem o cliente
init(customer: Customer) {
self.customer = customer
}
}
Resumo:
- Use weak quando a referência pode tornar-se nil e deseja evitar ciclos de retenção.
- Use unowned quando a referência deve sempre ser válida e o objeto existe por mais tempo do que a referência.