¿En qué casos es preferible usar unowned en lugar de weak en la gestión de memoria?
sobes.tech AI
Respuesta de la IA
En Swift, weak y unowned se utilizan para prevenir ciclos de referencias fuertes, pero se aplican en diferentes situaciones:
-
weakes una referencia opcional que se vuelve automáticamentenilcuando el objeto al que hace referencia se libera. Se usa cuando la referencia puede volversenildurante la vida del objeto. -
unownedes una referencia no opcional que asume que el objeto al que hace referencia siempre existirá durante el uso de esa referencia. Si el objeto se libera, acceder aunownedprovocará un error en tiempo de ejecución.
Se prefiere usar unowned cuando:
- La referencia siempre debe apuntar a un objeto existente (por ejemplo, un objeto padre que vive más que el hijo).
- Estás seguro de que la duración de vida del objeto al que te refieres no será menor que la duración de la referencia.
Ejemplo:
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)
Aquí, CreditCard tiene una referencia unowned a Customer, porque la tarjeta no puede existir sin el cliente, y el cliente vive más que la tarjeta.