Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon ¿Cómo uso el depurador del gráfico de memoria para identificar los ciclos de retención en aplicaciones mvvmcross?


¿Cómo uso el depurador del gráfico de memoria para identificar los ciclos de retención en aplicaciones mvvmcross?


El uso del depurador del gráfico de memoria en Xcode es una forma efectiva de identificar los ciclos de retención en aplicaciones MVVMCross. Aquí hay una guía paso a paso sobre cómo hacerlo:

Introducción al depurador del gráfico de memoria

El depurador del gráfico de memoria es una herramienta poderosa en Xcode que ayuda a los desarrolladores a identificar fugas de memoria y retener los ciclos visualizando las relaciones de objetos en la memoria. Proporciona una instantánea del estado de memoria actual, que muestra qué objetos se conservan y cómo se hace referencia.

Pasos para identificar ciclos de retención

1. Ejecute su aplicación: comience por ejecutar su aplicación MVVMCross en Xcode. Asegúrese de probar la parte específica de la aplicación donde sospecha que podría ocurrir un ciclo de retención.

2. Abra el depurador del gráfico de memoria: una vez que su aplicación se esté ejecutando, abra el depurador del gráfico de memoria haciendo clic en el botón de tres nodos ubicado entre el depurador visual y los botones del simulador de ubicación en la barra de herramientas de Xcode. Esto capturará una instantánea de memoria del estado actual de su aplicación.

3. Analice la instantánea de memoria: en el panel izquierdo del depurador del gráfico de memoria, verá una lista de objetos actualmente en la memoria, junto con el número de instancias de cada clase. Busque objetos que no deberían estar allí o que tengan un número inesperadamente alto de instancias.

4. Identifique los ciclos de retención: seleccione un objeto en el panel izquierdo para ver su gráfico de referencia. El gráfico mostrará fuertes referencias como líneas en negrita y referencias desconocidas (que podrían ser débiles o fuertes) como líneas gris claro. Un ciclo de retención se indica mediante un bucle en el gráfico donde los objetos se hacen referencia entre sí de una manera que evita que se acomoden.

5. Navegue por los gráficos de objetos: para rastrear la fuente de un ciclo de retención, es posible que deba navegar a través de múltiples gráficos de objetos. Comience con el objeto filtrado y siga las referencias hacia atrás para encontrar el objeto principal que lo retiene.

6. Inspeccione los detalles del objeto: cuando hace clic en un nodo en el gráfico, un panel de inspección proporcionará información detallada sobre el objeto, incluidas sus propiedades y relaciones. Esto puede ayudarlo a comprender por qué se retiene un objeto.

7. Repita los flujos de núcleo: para confirmar un ciclo de retención, repita el flujo o característica del núcleo en su aplicación varias veces, tomando instantáneas de memoria después de cada iteración. Si el número de instancias de un objeto particular aumenta con el tiempo, podría indicar un ciclo de retención.

8. Fije el ciclo de retención: una vez que haya identificado la fuente del ciclo de retención, puede arreglarlo cambiando referencias fuertes a referencias débiles o no propietarias cuando sea apropiado. Por ejemplo, en cierres, use `[yo débil]` para evitar capturar `` yo '"fuertemente.

Los escenarios de ciclo de retención común en MVVMCross

En las aplicaciones MVVMCross, los ciclos de retención a menudo ocurren debido a fuertes referencias entre modelos de vista y vistas o debido a que los cierres capturan los modelos o vistas de vista fuertemente. Por ejemplo, si un modelo de vista mantiene una fuerte referencia a una vista y la vista también contiene una fuerte referencia al modelo de vista, ninguno de los dos puede ser reparado.

Para evitar tales ciclos, asegúrese de que sus modelos de vista se limpien adecuadamente cuando se descarten las vistas. Use los métodos de ciclo de vida proporcionados por MVVMCross, como `desaparecido ()`, para liberar recursos y romper cualquier referencia innecesaria.

Siguiendo estos pasos y comprender cómo se visualizan las relaciones de objetos en el depurador del gráfico de memoria, puede identificar y reparar efectivamente los ciclos de retención en sus aplicaciones MVVMCross.

Citas:
[1] https://doordash.ingineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-bugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-bugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-graph-bugger/
[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-leaks/
[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/