Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Como uso o depurador de gráficos de memória para identificar ciclos de retenção em aplicativos MVVMCROSS


Como uso o depurador de gráficos de memória para identificar ciclos de retenção em aplicativos MVVMCROSS


O uso do depurador de gráficos de memória no Xcode é uma maneira eficaz de identificar ciclos de retenção em aplicativos MVVMCROSS. Aqui está um guia passo a passo sobre como fazê-lo:

Introdução ao depurador do gráfico de memória

O depurador de gráficos de memória é uma ferramenta poderosa no Xcode que ajuda os desenvolvedores a identificar vazamentos de memória e reter ciclos, visualizando os relacionamentos de objetos na memória. Ele fornece um instantâneo do estado de memória atual, mostrando quais objetos são retidos e como eles são referenciados.

etapas para identificar ciclos de retenção

1. Execute seu aplicativo: comece executando seu aplicativo MVVMCROSS no Xcode. Verifique se você está testando a parte específica do aplicativo, onde você suspeita que um ciclo de retenção possa ocorrer.

2. Abra o depurador do gráfico de memória: Depois que seu aplicativo estiver em execução, abra o depurador do gráfico de memória clicando no botão de três nós localizado entre os botões Visual Debugger e Location Simulator na barra de ferramentas do Xcode. Isso capturará um instantâneo de memória do estado atual do seu aplicativo.

3. Analise o instantâneo da memória: No painel esquerdo do depurador de gráficos de memória, você verá uma lista de objetos atualmente na memória, juntamente com o número de instâncias de cada classe. Procure objetos que não devem estar lá ou que tenham um número inesperadamente alto de instâncias.

4. Identifique os ciclos de reter: selecione um objeto no painel esquerdo para visualizar seu gráfico de referência. O gráfico mostrará referências fortes como linhas em negrito e referências desconhecidas (que podem ser fracas ou fortes) como linhas cinza claro. Um ciclo de retenção é indicado por um loop no gráfico em que os objetos se referenciam de uma maneira que os impede de serem desalocados.

5. Navegue por gráficos de objetos: Para rastrear a fonte de um ciclo de retenção, pode ser necessário navegar por vários gráficos de objetos. Comece com o objeto vazado e siga as referências para trás para encontrar o objeto pai que o está mantendo.

6. Inspecione os detalhes do objeto: Quando você clica em um nó no gráfico, um painel de inspeção fornece informações detalhadas sobre o objeto, incluindo suas propriedades e relacionamentos. Isso pode ajudá -lo a entender por que um objeto está sendo retido.

7. Repita os fluxos do núcleo: para confirmar um ciclo de retenção, repita o fluxo ou recurso do núcleo em seu aplicativo várias vezes, tirando instantâneos de memória após cada iteração. Se o número de instâncias de um objeto específico aumentar com o tempo, poderá indicar um ciclo de retenção.

8. Corrija o ciclo de retenção: Depois de identificar a fonte do ciclo de retenção, você pode corrigi -lo alterando fortes referências a referências fracas ou não de propriedade, quando apropriado. Por exemplo, nos fechamentos, use `[Self fraco]` para evitar capturar `self 'fortemente.

Cenários de ciclo de retenção comuns em mvvmcross

Nas aplicações MVVMCROSS, os ciclos de retenção geralmente ocorrem devido a fortes referências entre modelos de visão e vistas ou devido a fechamentos que capturam fortemente modelos de visão ou visualizações. Por exemplo, se um modelo de visualização mantive uma forte referência a uma visão e a visualização também mantém uma forte referência de volta ao modelo de visualização, nenhum dos dois poderá ser desalocado.

Para evitar esses ciclos, verifique se seus modelos de visualização são limpos corretamente quando as vistas são descartadas. Use os métodos do ciclo de vida fornecidos pelo MVVMcross, como `desaparecido ()`, para liberar recursos e quebrar quaisquer referências desnecessárias.

Seguindo estas etapas e compreendendo como os relacionamentos de objetos são visualizados no depurador de gráficos de memória, você pode identificar e corrigir efetivamente os ciclos de retenção em seus aplicativos MVVMCROSS.

Citações:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-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-trep-to-findmemory-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cycle-itues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/