Junior — Middle
Em que casos é preferível usar unowned em vez de weak na gestão de memória?
sobes.tech IA
Resposta da IA
Em Swift, weak e unowned são usados para evitar ciclos de referências fortes, mas aplicam-se em situações diferentes:
-
weaké uma referência opcional que se torna automaticamentenilquando o objeto ao qual se refere é libertado. É usada quando a referência pode tornar-senildurante a vida do objeto. -
unownedé uma referência não opcional que assume que o objeto ao qual se refere sempre existirá durante o uso dessa referência. Se o objeto for libertado, o acesso aunownedprovocará um erro em tempo de execução.
Prefere-se usar unowned quando:
- A referência deve sempre apontar para um objeto existente (por exemplo, um objeto pai que vive mais do que o filho).
- Tem certeza de que a duração de vida do objeto ao qual se refere não será menor do que a duração da referência.
Exemplo:
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
}
let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)
Aqui, CreditCard tem uma referência unowned a Customer, porque o cartão não pode existir sem o cliente, e o cliente vive mais do que o cartão.