Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Lo strumento grafico di memoria può aiutare a identificare i cicli di conservazione nelle applicazioni MVVMCRoss


Lo strumento grafico di memoria può aiutare a identificare i cicli di conservazione nelle applicazioni MVVMCRoss


Sì, lo strumento grafico di memoria in Xcode può aiutare a identificare i cicli di conservazione nelle applicazioni MVVMCRoss. Ecco come funziona e come può essere applicato a mvvmcross:

comprensione di conservazione dei cicli

I cicli di consumo si verificano quando due o più oggetti tengono riferimenti forti tra loro, impedendo loro di essere trattati dalla memoria. Questo è un problema comune nello sviluppo di iOS, soprattutto quando si utilizzano delegati o chiusure che catturano fortemente oggetti.

Utilizzo dello strumento grafico di memoria

1. Esecuzione dell'app e prendendo istantanee: per utilizzare lo strumento grafico della memoria, eseguire l'applicazione MVVMCRoss in Xcode e navigare attraverso i suoi flussi di base. Prendi le istantanee di memoria in diversi punti, soprattutto dopo aver navigato dalle viste o modelli di visualizzazione che dovrebbero essere trattati.

2. Analisi delle istantanee: nel debugger del grafico della memoria, il pannello sinistro visualizza tutti gli oggetti attualmente in memoria, insieme ai loro conteggi di istanza. Cerca oggetti che avrebbero dovuto essere trafficati ma che sono ancora presenti. Un aumento del numero di istanze di una classe nel tempo può indicare un ciclo di mantenimento.

3. Identificazione dei cicli di conservazione: selezionare un oggetto nel pannello a sinistra per visualizzare il grafico degli oggetti. Il grafico mostra i riferimenti che mantengono l'oggetto in memoria. Le linee audaci indicano riferimenti forti, mentre le linee grigie chiaro indicano riferimenti sconosciuti (che potrebbero essere deboli o forti). Se vedi un ciclo in cui gli oggetti si riferiscono fortemente, è probabile che un ciclo di mantenimento.

4. Fissaggio di mantenimento dei cicli: una volta identificato un ciclo di mantenimento, rivedi il codice per scoprire dove vengono creati i riferimenti forti. Spesso ciò comporta un cambiamento di riferimenti forti a riferimenti deboli, specialmente nei delegati o nelle chiusure.

Applicando a mvvmcross

Nelle applicazioni MVVMCRoss, i modelli di visualizzazione sono strettamente accoppiati al ciclo di vita delle viste. Questo a volte può portare a conservi cicli se non gestiti correttamente. Ad esempio, se un modello di visualizzazione ha un forte riferimento a una vista e la vista contiene anche un forte riferimento al modello di vista (forse attraverso un legame), può verificarsi un ciclo di mantenimento.

Per evitarlo in MVVMCRoss, assicurarsi che tutti i riferimenti dalle viste ai modelli di visualizzazione siano deboli. Utilizzare i metodi del ciclo di vita forniti da mvvmcross (come `scomparso`) per ripulire eventuali riferimenti forti quando le opinioni vengono respinte. Inoltre, utilizzare lo strumento grafico di memoria per verificare che i modelli di visualizzazione vengano trattati correttamente quando le viste associate vengono rimosse dallo stack di navigazione.

Esempio di identificazione dei cicli di conservazione in mvvmcross

Supponiamo che tu abbia un `myviewmodel` che è legato a un` myview`. Se `myview` tiene un forte riferimento a` myviewmodel` e `myviewmodel` tiene anche un forte riferimento a` myview` (forse attraverso un delegato o una chiusura), vedresti entrambi gli oggetti rimasti in memoria anche dopo aver navigato lontano da `myview`. Utilizzando lo strumento grafico della memoria, identificheresti questo ciclo e quindi modificare il codice per utilizzare riferimenti deboli ove necessario.

Seguendo questi passaggi e utilizzando lo strumento grafico della memoria, è possibile identificare e risolvere efficacemente i cicli di consumo nelle applicazioni MVVMCRoss, garantendo che l'utilizzo della memoria dell'app rimanga efficiente e stabile.

Citazioni:
[1] https://doordash.engineering/2019/05/22/ios-memory-deaks-and-retain-cycle-dection-using-xcodes-memory-graph-debugger/
[2] https://carersetdoordash.com/blog/ios-memory-deaks-and-retain-cycle-dection-using-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-deak-with-memory-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-be-keep-hold-of-viewmodels-and-never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-deaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-and-removing-them