L'uso del debugger grafico di memoria in Xcode è un modo efficace per identificare i cicli di conservazione nelle applicazioni MVVMCRoss. Ecco una guida passo-passo su come farlo:
Introduzione al debugger del grafico della memoria
Il debugger del grafico della memoria è uno strumento potente in Xcode che aiuta gli sviluppatori a identificare le perdite di memoria e trattenere i cicli visualizzando le relazioni di oggetti in memoria. Fornisce un'istantanea dello stato di memoria corrente, mostrando quali oggetti vengono mantenuti e come vengono referenziati.
passi per identificare i cicli di conservazione
1. Esegui l'app: inizia eseguendo l'applicazione MVVMCRoss in Xcode. Assicurati di testare la parte specifica dell'app in cui sospetti che possa verificarsi un ciclo di mantenimento.
2. Apri il debugger grafico di memoria: una volta eseguito l'app, apri il debugger grafico di memoria facendo clic sul pulsante a tre nodi situato tra il debugger visivo e i pulsanti del simulatore di posizione nella barra degli strumenti di Xcode. Ciò catturerà un'istantanea di memoria dello stato corrente della tua app.
3. Analizzare l'istantanea della memoria: nel pannello sinistro del debugger del grafico della memoria, vedrai un elenco di oggetti attualmente in memoria, insieme al numero di istanze di ciascuna classe. Cerca oggetti che non dovrebbero essere lì o che abbiano un numero inaspettatamente elevato di istanze.
4. Identificare i cicli di conservazione: selezionare un oggetto dal pannello sinistro per visualizzare il grafico di riferimento. Il grafico mostrerà forti riferimenti come linee audaci e riferimenti sconosciuti (che potrebbero essere deboli o forti) come linee grigio chiaro. Un ciclo di mantenimento è indicato da un ciclo nel grafico in cui gli oggetti si riferiscono a vicenda in un modo che impedisce loro di essere trattati.
5. Passa grafici degli oggetti: per rintracciare la fonte di un ciclo di mantenimento, potrebbe essere necessario navigare tramite più grafici di oggetti. Inizia con l'oggetto trapelato e segui i riferimenti all'indietro per trovare l'oggetto genitore che lo sta trattenendo.
6. Ispezionare i dettagli dell'oggetto: quando si fa clic su un nodo nel grafico, un pannello di ispezione fornirà informazioni dettagliate sull'oggetto, comprese le sue proprietà e le sue relazioni. Questo può aiutarti a capire perché un oggetto viene mantenuto.
7. Ripeti i flussi di core: per confermare un ciclo di mantenimento, ripetere più volte il flusso di core o la funzione nell'app, prendendo istantanee di memoria dopo ogni iterazione. Se il numero di istanze di un particolare oggetto aumenta nel tempo, potrebbe indicare un ciclo di mantenimento.
8. Risolvi il ciclo di conservazione: una volta identificato la fonte del ciclo di conservazione, è possibile risolverlo cambiando riferimenti forti a riferimenti deboli o non reati ove appropriato. Ad esempio, nelle chiusure, usa `[sé debole]` per evitare di catturare fortemente.
scenari di ciclo di conservazione comuni in mvvmcross
Nelle applicazioni MVVMCRoss, i cicli di conservazione si verificano spesso a causa di forti riferimenti tra modelli di visualizzazione e viste o a causa delle chiusure che catturano fortemente modelli di visualizzazione o viste. Ad esempio, se un modello di visualizzazione ha un forte riferimento a una vista e la vista tiene anche un forte riferimento al modello di visualizzazione, nessuno dei due può essere traffico.
Per prevenire tali cicli, assicurarsi che i modelli di visualizzazione siano adeguatamente ripuliti quando le viste vengono licenziate. Utilizzare i metodi del ciclo di vita forniti da mvvmcross, come `scompare ()`, per rilasciare risorse e rompere eventuali riferimenti non necessari.
Seguendo questi passaggi e comprendendo come vengono visualizzate le relazioni di oggetti nel debugger del grafico della memoria, è possibile identificare e correggere efficacemente i cicli di conservazione nelle applicazioni MVVMCRoss.
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://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-memory-teaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/