Diferencias entre unowned y weak
Libranner Santos
13 marzo, 20232min de lectura
Cuando escribimos código en Swift debemos tener muy en cuenta como manejamos las referencias a nuestras clases, para que el Automatic Reference Counting (ARC) puede liberar la memoria cuando ya no las necesitemos.
Para indicar que queremos tratar una referencia de manera explícita, podemos usar unowned
y weak
.
El tiempo de vida del objeto es la característica principal para saber cuando usaremos weak
o unowned
:
- Si no puedes determinar cual de los objetos implicados en la relación tendrá un tiempo de vida mayor, deberías usar
weak.
- Si podemos garantizar que ambos objetos tendrán el mismo tiempo de vida, puedes usar
unwoned
.
Ventajas de usar weak
-
Como es opcional, podrás tener soporte en tiempo de compilación. Es decir, el compilador te informará que debes tratar el objeto en cuestión como opcional.
-
Evitarás crashes relacionados a acceder un objeto que no está en memoria.
Desventajas de usar weak
- Tener que introducir validaciones relacionadas a trabajar con opcionales.
Ventajas de usar unowned
- No tienes que usar opcionales.
- Acceder a una propiedad o llamar un método en una referencia
unowned
, es un poco más rápido. Pero la diferencia de rendimiento es muy mínima. - Se comunica de una manera las relaciones entre objetos, por ejemplo, las de padre-hijo. Si usamos
unowned
cuando leemos el código estamos seguros que un objeto no podrá existir sin otro.
Desventajas de usar unowned
- Acceder una referencia
unowned
inválida causará un crash. - Si el código cambia y por alguna razón la relación entre los objetos ya no es directa, tendrás que cambiar
unowned
porweak
.