objective-c xcode xcode4 nszombie

objective c - ¿Cómo configuro NSZombieEnabled en Xcode 4?



objective-c xcode4 (7)

¿Cómo configuro NSZombieEnabled y CFZombieLevel para mi ejecutable en Xcode 4?



Cocoa ofrece una característica interesante que mejora enormemente sus capacidades para depurar tales situaciones. Es una variable de entorno que se llama NSZombieEnabled, vea este video que explica cómo configurar NSZombieEnabled en object-C


En Xcode 4.2

  • Nombre del proyecto / Esquema de edición / Diagnóstico /
  • Habilitar la casilla de verificación Objetos Zombie
  • Has terminado

En Xcode 4.x presiona

R

(o haga clic en la Menubar > Product > Scheme > Edit Scheme )

seleccione la pestaña "Diagnóstico" y haga clic en "Habilitar objetos Zombie":

Esto convierte los objetos liberados en instancias de NSZombie que imprimen advertencias de consola cuando se usan de nuevo. Esta es una ayuda de depuración que aumenta el uso de la memoria (no se libera realmente ningún objeto) pero mejora el informe de errores.

Un caso típico es cuando liberas un objeto en exceso y no sabes cuál:

  • Con zombies: -[UITableView release]: message sent to deallocated instance
  • Sin zombies:

Esta configuración de Xcode se ignora cuando archiva la aplicación para el envío de App Store. No necesitas tocar nada antes de lanzar tu aplicación.

Presionar ⌥⌘R es lo mismo que seleccionar Producto> Ejecutar mientras se mantiene presionada la tecla Alt.
Hacer clic en la casilla de verificación "Habilitar objetos zombis" es lo mismo que agregar manualmente "NSZombieEnabled = SÍ" en la sección "Variables de entorno" de la pestaña Argumentos.


En Xcode> 4.3:

Haga clic en la barra desplegable de esquema -> editar esquema -> pestaña de argumentos y luego agregue NSZombieEnabled en la columna de Variables de entorno y YES en la columna de valor.

Buena suerte !!!


La respuesta de Jano es la forma más fácil de encontrarlo. Otra forma sería si hiciera clic en la barra desplegable de esquema -> editar esquema -> pestaña de argumentos y luego agregue NSZombieEnabled en la columna Variables de entorno y SÍ en la columna de valor ...


Me parece más conveniente esta alternativa:

  1. Haga clic en "Ejecutar botón desplegable"
  2. De la lista elige Profile
  3. El programa "Instrumentos" debería abrirse donde también puedes elegir Zombies
  4. Ahora puedes interactuar con tu aplicación e intentar causar el error.
  5. Tan pronto como ocurra el error, debería obtener una pista sobre cuándo se lanzó su objeto y, por lo tanto, se desasignó.

Tan pronto como se detecte un zombi, obtendrás una "Zombie Stack" ordenada que te muestra cuándo se asignó el objeto en cuestión y dónde se retuvo o liberó:

Event Type RefCt Responsible Caller Malloc 1 -[MyViewController loadData:] Retain 2 -[MyDataManager initWithBaseURL:] Release 1 -[MyDataManager initWithBaseURL:] Release 0 -[MyViewController loadData:] Zombie -1 -[MyService prepareURLReuqest]

Ventajas en comparación con el uso de la pestaña de diagnóstico de los Esquemas de Xcode :

  1. Si olvida desmarcar la opción en la pestaña de diagnóstico, no se liberarán objetos de la memoria.

  2. Obtiene una pila más detallada que le muestra en qué métodos se asignó / liberó o retuvo su objeto dañado.