Swift LanguageGestione della memoria


introduzione

Questo argomento descrive come e quando il runtime di Swift deve allocare memoria per le strutture di dati dell'applicazione e quando tale memoria deve essere recuperata. Per impostazione predefinita, le istanze della classe di supporto della memoria vengono gestite tramite il conteggio dei riferimenti. Le strutture sono sempre passate attraverso la copia. Per disattivare lo schema di gestione della memoria integrato, si potrebbe usare la struttura [ Unmanaged ] [1]. [1]: https://developer.apple.com/reference/swift/unmanaged

Osservazioni

Quando utilizzare la parola chiave weak:

La parola chiave weak deve essere utilizzata, se un oggetto di riferimento può essere deallocato durante la vita dell'oggetto che detiene il riferimento.

Quando utilizzare la parola chiave sconosciuta:

Il unowned -parola chiave deve essere utilizzato, se un oggetto di riferimento non dovrebbe essere deallocato durante la vita dell'oggetto tiene il riferimento.

insidie

Un errore frequente è quello di dimenticare di creare riferimenti agli oggetti, che sono necessari per sopravvivere al termine di una funzione, come i gestori di località, i gestori del movimento, ecc.

Esempio:

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

Questo esempio non funzionerà correttamente, in quanto il gestore di posizione viene deallocato dopo il ritorno dell'inizializzatore. La soluzione corretta è creare un riferimento forte come variabile di istanza:

class A : CLLocationManagerDelegate
{
    let locationManager:CLLocationManager

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

Gestione della memoria Esempi correlati