Junior
¿Qué es el modificador de memoria weak en Swift?
sobes.tech AI
Respuesta de la IA
El modificador weak se utiliza para romper ciclos de referencias fuertes entre objetos, cuando un objeto tiene una referencia fuerte a otro, y este a su vez tiene una referencia fuerte de vuelta.
Características principales de weak:
- No aumenta el contador de referencias: El uso de
weakno incrementa el número de referencias fuertes al objeto. - Puede ser nil: La referencia débil es opcional (
Optional) y se vuelve automáticamentenilcuando el objeto al que hace referencia se desinicializa. - Se usa para padre/hijo: Se aplica a menudo cuando un objeto hijo tiene una referencia a su padre para evitar ciclos de referencias fuertes.
- Requiere ser declarado como
var: Dado que la referencia débil puede volversenil, debe ser una variable (var), no una constante (let).
Ejemplo de uso:
class Person {
let name: String
var apartment: Apartment?
init(name: String) {
self.name = name
print("\(name) está siendo inicializado")
}
deinit {
print("\(name) está siendo desinicializado")
}
}
class Apartment {
let unit: String
weak var tenant: Person? // Referencia débil
init(unit: String) {
self.unit = unit
print("Apartamento \(unit) está siendo inicializado")
}
deinit {
print("Apartamento \(unit) está siendo desinicializado")
}
}
Sin weak var tenant: Person? en la clase Apartment, se produciría un ciclo de referencias fuertes, y las instancias de Person y Apartment no serían desinicializadas cuando ya no tengan otras referencias fuertes. Gracias a weak, cuando la instancia de Person se desinicializa, la referencia tenant en la instancia de Apartment se vuelve automáticamente nil.