Middle
¿Cómo se almacenan las vistas que son un tipo de referencia?
sobes.tech AI
Respuesta de la IA
Las vistas (UIView y sus subclases) en iOS son clases, por lo tanto, tipos de referencia. El almacenamiento de referencias a ellas se realiza mediante los siguientes mecanismos:
-
Referencias fuertes (Strong References):
- Por defecto, si declaras una propiedad para UIView sin el especificador
weakounowned, esto crea una referencia fuerte. - Una referencia fuerte incrementa el contador de referencias del objeto. El objeto no será eliminado de la memoria mientras exista al menos una referencia fuerte a él.
- Esta es la forma estándar de almacenar vistas cuando se requiere que permanezcan en memoria y sean accesibles.
//Referencia fuerte var myView: UIView = UIView() - Por defecto, si declaras una propiedad para UIView sin el especificador
-
Referencias débiles (Weak References):
- Se declaran usando la palabra clave
weak. - Una referencia débil no incrementa el contador de referencias del objeto.
- Las referencias débiles no previenen la eliminación del objeto de la memoria si no quedan referencias fuertes a él.
- Se usan para prevenir ciclos de referencias fuertes, una situación típica es la relación padre-hijo, donde el padre tiene una referencia fuerte al hijo, y el hijo a veces puede tener una referencia al padre. En este caso, la referencia inversa al padre debe ser débil.
- Las referencias débiles deben ser opcionales (
Optional), ya que el objeto puede ser eliminado y la referencia se volveránil.
weak var parentView: UIView? - Se declaran usando la palabra clave
-
Referencias no poseídas (Unowned References):
- Se declaran usando la palabra clave
unowned. - Al igual que las referencias débiles, no incrementan el contador de referencias.
- Diferencia: a diferencia de las referencias débiles, las referencias no poseídas no son opcionales. Se asume que el objeto vivirá al menos mientras exista la referencia a él. La aplicación se bloqueará si se intenta acceder al objeto mediante una referencia no poseída después de que haya sido liberado.
- Se usan cuando se está seguro de que el ciclo de vida de la referencia no excede el ciclo de vida del objeto al que apunta. En el contexto de vistas, esto es menos común que
weak.
//Menos típico para vistas, pero posible unowned var childView: UIView - Se declaran usando la palabra clave
-
Arreglos y Colecciones:
- El almacenamiento de referencias a vistas en arreglos (
Array), diccionarios (Dictionary) o conjuntos (Set) también por defecto crea referencias fuertes a los elementos de la colección.
var subviews: [UIView] = [] - El almacenamiento de referencias a vistas en arreglos (
La elección entre referencia fuerte, débil o no poseída depende del escenario específico de uso y la gestión del ciclo de vida de los objetos para prevenir fugas de memoria. En SwiftUI, los conceptos de gestión del ciclo de vida de las vistas son diferentes, pero en el contexto de UIKit, estos mecanismos siguen siendo la forma principal de almacenamiento de referencias.