He visto que dicen sugerencias para establecer NSZombieEnabled
que true
durante la depuración. ¿Qué es NSZombie? ¿Es un marco? ¿Un ajuste?
ios
iphone
objective-c
nszombie
Moshe
fuente
fuente
Respuestas:
Es una ayuda para depurar la memoria. Específicamente, cuando establece
NSZombieEnabled
entonces, cuando un objeto alcanza el valor de retención 0, en lugar de ser desasignado, se transforma en unaNSZombie
instancia. Cada vez que un zombi recibe un mensaje, registra una advertencia en lugar de bloquearse o comportarse de manera impredecible. Como tal, puede depurar problemas sutiles de liberación excesiva / liberación automática sin herramientas avanzadas o agujas minuciosas en las búsquedas en el pajar.El nombre es un juego bastante obvio con el hecho de que los objetos normalmente se consideran "muertos" cuando alcanzan el recuento de retención 0. Con esta configuración, continúan existiendo en una extraña vida media: ni vivos ni del todo muertos. Al igual que los zombis reales, excepto que comen menos cerebros.
fuente
Adam hizo un gran trabajo explicando qué son los zombis, pero usar la variable de entorno no es la mejor manera de encontrarlos y rastrearlos.
Un enfoque mucho mejor para la detección de zombies es simplemente usar Instrumentos - desde XCode comience con "Ejecutar con Instrumento" y elija "Asignaciones".
Luego, detenga la grabación justo después de que comience, presione el botón "i" en el instrumento de asignaciones y active "habilitar recuentos de referencia" y "habilitar NSZombie Detection". Ahora presione Grabar nuevamente en el instrumento, y su aplicación se iniciará; si se envía algún objeto zombie, la grabación se detendrá y aparecerá un cuadro de diálogo en la línea de tiempo de grabación; puede hacer clic en él para encontrar cada lugar donde se encontraba un objeto retenido o liberado.
Editar: El consejo anterior era para XCode 3, aquí hay una adición para XCode 4:
En XCode 4.2 , hay un mecanismo aún más fácil para hacer uso de la detección de zombies: el instrumento Zombie. En lugar de "Ejecutar" para iniciar la aplicación, use "Perfil" y aparecerá un selector de instrumentos. Seleccione "Zombie" y la aplicación comenzará a ejecutarse; haga lo que sea que cause el bloqueo, aparecerá un cuadro de diálogo que dice "Mensaje de Zombie".
Desde allí, haga clic en la flecha pequeña del cuadro de diálogo. Eso llevará a una lista de todas las veces que se creó, retuvo o lanzó ese objeto zombie. Tire hacia arriba de la barra lateral y puede ir a cada entrada, mirando el seguimiento de la pila para el código que fue responsable de cada ajuste en el recuento de retención.
fuente
Estoy de acuerdo con lo que agregó Kendall, es muy útil, pero sugeriré que sigas haciendo la variable de entorno para que no olvides que están habilitadas. Similar al enlace (ahora vencido) en Cocoa Dev, puse esto para que no me lo pierda:
Me llama la atención muy bien.
fuente
Ayudaría a alguien.
Documento detallado sobre instrumentos. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1
fuente