¿Cómo configuro NSZombieEnabled en Xcode 4?

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

En Xcode 4.x presione

R

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

seleccione la pestaña “Diagnóstico” y haga clic en “Activar objetos Zombie”:

Haga clic en

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

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

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

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

Presionar ⌥⌘R es lo mismo que seleccionar Producto> Ejecutar mientras se mantiene presionada la tecla Alt.
Hacer clic en la checkbox “Activar objetos Zombie” es lo mismo que agregar manualmente “NSZombieEnabled = YES” en la sección “Variables de entorno” de la pestaña Argumentos.

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

Encuentro esta alternativa más conveniente:

  1. Haga clic en el menú desplegable “Ejecutar botón”
  2. De la lista, elige Profile
  3. El progtwig “Instrumentos” debería abrir donde también puedes elegir Zombies
  4. Ahora puedes interactuar con tu aplicación y tratar de causar el error
  5. Tan pronto como se produzca el error, debe obtener una pista sobre cuándo se liberó su objeto y, por lo tanto, desasignarse.

Zombies

Tan pronto como se detecta un zombi, obtienes una ordenada “stack de zombis” que te muestra cuándo se asignó el objeto en cuestión y dónde fue retenido o liberado:

 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 stack más detallada que le muestra en qué métodos se asignó / liberó o conservó su objeto corrupto.

En Xcode 4.2

  • Nombre del proyecto / Editar esquema / Diagnóstico /
  • Habilitar la checkbox Objetos Zombie
  • Ya terminaste

En In Xcode 7

<

o seleccione Edit Scheme desde Product > Menú Scheme

seleccione Enable Zombie Objects la pestaña Diagnostics

xcode 7 bandera zombie

Como alternativa, si prefiere los archivos .xcconfig , puede leer este artículo https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/

Cocoa ofrece una característica genial que mejora enormemente sus capacidades para depurar tales situaciones. Es una variable de entorno llamada NSZombieEnabled, mire este video que explica cómo configurar NSZombieEnabled en Objective-C

En Xcode> 4.3:

Hace clic en la barra desplegable de esquema -> esquema de edición -> pestaña de argumentos y luego agrega NSZombieEnabled en la columna Variables de entorno y SÍ en la columna de valor.

Buena suerte !!!