Looking for swift Answers? Try Ask4KnowledgeBase
Looking for swift Keywords? Try Ask4Keywords

Swift LanguageGestión de la memoria


Introducción

Este tema describe cómo y cuándo el tiempo de ejecución de Swift asignará memoria para las estructuras de datos de la aplicación y cuándo se recuperará esa memoria. De forma predeterminada, las instancias de la clase de respaldo de memoria se administran a través del conteo de referencias. Las estructuras se pasan siempre a través de la copia. Para excluirse del esquema de administración de memoria incorporado, se podría usar la estructura [ Unmanaged ] [1]. [1]: https://developer.apple.com/reference/swift/unmanaged

Observaciones

Cuándo usar la palabra clave débil:

La palabra clave weak debe usarse, si un objeto referenciado puede ser desasignado durante la vida útil del objeto que contiene la referencia.

Cuándo usar la palabra clave sin dueño:

Se debe usar la palabra clave unowned propietario, si no se espera que un objeto referenciado se desasigne durante la vida útil del objeto que contiene la referencia.

Escollos

Un error frecuente es olvidarse de crear referencias a objetos, que se requieren para vivir después de que finaliza una función, como administradores de ubicación, administradores de movimiento, etc.

Ejemplo:

class A : CLLocationManagerDelegate
{
    init()
    {
        let locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startLocationUpdates()
    }
}

Este ejemplo no funcionará correctamente, ya que el administrador de ubicación se desasigna una vez que el inicializador regresa. La solución adecuada es crear una referencia fuerte como una variable de instancia:

class A : CLLocationManagerDelegate
{
    let locationManager:CLLocationManager

    init()
    {
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager.startLocationUpdates()
    }
}

Gestión de la memoria Ejemplos relacionados