Imprima fuertes propietarios de un object, Swift

Hay algunos ciclos de retención en mi aplicación iOS.

Para un viewController particular, atrapado en un ciclo de retención, he intentado hacer que todos los delegates estén débiles. Pero cuando simulo la advertencia de memory desde el simulador, se llamó a RememberMemoryWarning, pero no se llama al método deinit.

Quiero imprimir / ver al propietario de ese viewController que todavía lo está manteniendo cuando se llama a RecieveMemoryWarning. ¿Hay alguna forma de que pueda hacer esto?

No hay una manera de imprimir los propietarios de un object como usted describe, al less no exactamente. iOS no utiliza la recolección de basura, usa ARC (recuento automático de references). El sistema no realiza el seguimiento de tener references en ARC. En cambio, cada vez que agrega una reference propietaria a un object, el sistema aumenta un recuento de retención y, cada vez que borra una reference propietaria, el sistema decrementa que retenga el recuento.

Sin embargo, lo que puede hacer es ejecutar su progtwig con el instrumento de memory. (Hay una aplicación de debugging llamada "Instrumentos", selecciona una plantilla de debugging llamada un "instrumento" que usa dentro del progtwig de Instrumentos). Con el instrumento de memory puede seguir el ciclo de vida de un object, así como rastrear el número de objects activos en el montón de la aplicación. Cuando selecciona un object en la list de objects actualmente activos, puede ver dónde se asignó el progtwig y dónde proviene el código que crea las references fuertes. Explicar cómo usar Instruments está más allá del scope de una publicación SO, sin embargo. Hay varios tutoriales y videos de session de WWDC sobre el tema. Sugiero hacer alguna búsqueda.

En cuanto a su pregunta, forzar una advertencia de memory baja no provocaría que se libere un controller de vista activo (uno que esté en pantalla) y que se llame al método deinit. El sistema mantiene una fuerte reference al controller de vista.

Además, debería hacer que las references de delegado sean débiles de forma pnetworkingeterminada. Tener una reference de delegado ser una reference sólida es MUY inusual. Solo lo he visto una o dos veces, por razones específicas.

Si está en Xcode 8, puede usar Memory Graph Debugger para ver visualmente el gráfico de memory activo para los objects en sus proyectos. Puede acceder al depurador de charts de memory utilizando el icono de tres círculos que se muestra a continuación. introduzca la descripción de la imagen aquí

El depurador de charts de memory se destacó en WWDC 2016 en la siguiente conferencia, comenzando alnetworkingedor de las 24:30.

https://developer.apple.com/videos/play/wwdc2016/410/

Puede hacer una printing en el método deinit como

class Person { let name: String init(name: String) { self.name = name print("\(name) is being initialized") } deinit { print("\(name) is being deinitialized") } } 

Puede verificar esto: Recuento automático de references

    Intereting Posts