¿Cómo configuro NSZombieEnabled
y CFZombieLevel
para mi ejecutable en Xcode 4?
¿Cómo configuro NSZombieEnabled
y CFZombieLevel
para mi ejecutable en Xcode 4?
Respuestas:
En Xcode 4.x presione
(o clic Menubar
> Product
> Scheme
> Edit Scheme
)
seleccione la pestaña "Diagnóstico" y haga clic en "Habilitar objetos zombis":
Esto convierte los objetos liberados en instancias de NSZombie que imprimen advertencias de la consola cuando se usan nuevamente. Esta es una ayuda de depuración que aumenta el uso de memoria (no se libera realmente ningún objeto) pero mejora la notificación de errores.
Un caso típico es cuando liberas un objeto en exceso y no sabes cuál:
-[UITableView release]: message sent to deallocated instance
Esta configuración de Xcode se ignora cuando archiva la aplicación para enviarla a la App Store. No necesita tocar nada antes de lanzar su aplicación.
Presionar ⌥⌘Res lo mismo que seleccionar Producto> Ejecutar mientras se mantiene Altpresionada la tecla.
Hacer clic en la casilla de verificación "Habilitar objetos zombis" es lo mismo que agregar manualmente "NSZombieEnabled = YES" en la sección "Variables de entorno" de la pestaña Argumentos.
CMD-<
( CMD-SHIFT-comma
), oProduct -> Scheme -> Edit SCheme...
La respuesta de Jano es la forma más fácil de encontrarlo ... otra forma sería hacer clic en la barra desplegable del esquema -> editar esquema -> pestaña de argumentos y luego agregar NSZombieEnabled en la columna Variables de entorno y SÍ en la columna de valor ...
Encuentro esta alternativa más conveniente:
Profile
Zombies
Tan pronto como se detecta un zombie, obtienes una "Pila de zombis" ordenada que te muestra cuándo se asignó el objeto en cuestión y dónde se retuvo o se 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 :
Si olvida desmarcar la opción en la pestaña de diagnóstico, no se liberarán objetos de la memoria.
Obtiene una pila más detallada que le muestra en qué métodos se asignó / liberó o retuvo su objeto corrupto.
iOS Simulator > All
de la lista de plantillas principales (solo puede hacer esto en el simulador)
En Xcode 4.2
o seleccione Edit Scheme
desde Product
> Scheme
Menú
seleccione Enable Zombie Objects
formar la Diagnostics
pestaña
Como alternativa, si prefiere .xcconfig
archivos, 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 que se llama NSZombieEnabled, vea este video que explica cómo configurar NSZombieEnabled en el objetivo-C
En Xcode> 4.3:
Hace clic en la barra desplegable del esquema -> editar esquema -> pestaña argumentos y luego agrega NSZombieEnabled en la columna Variables de entorno y SÍ en la columna de valor.
Buena suerte !!!