¡Ayuda, he estado pirateando esto durante semanas ahora! Tengo esta aplicación que estoy desarrollando en el simulador, y he hecho muchas cosas sobre la interfaz de usuario, solo estoy llegando a la parte interesante con datos. Comenzó inmediatamente después del lanzamiento, aproximadamente el 90% del tiempo que lo ejecuto, aumentará la excepción EXC_BAD_ACCESS.Cómo depurar EXC_BAD_ACCESS en la aplicación iPhone cuando no puedo determinar la causa?
He comentado todos mis mensajes de lanzamiento, e incluso he agregado algunos mensajes de retención para asegurarme de que no sea algo que se haya liberado. Lo extraño es que a veces algo que hago en el código lo hace funcionar, luego funciona hasta que hago otro cambio de código. Luego, comento el nuevo código que agregué, y aún falla.
He leído probablemente una docena de artículos en la web sobre esto, he intentado con las cosas que sugieren. He establecido puntos de interrupción y todavía no puedo descubrir dónde está. Cuando hago clic en la pila de llamadas en el depurador, el único lugar que muestra el código fuente es el nivel inferior, que es el principal.
El depurador tiene esta pila, pero eso fluctúa un poco cada vez que se bloquea. La naturaleza inconsistente me dice que hay algo de memoria que se está liberando automáticamente, pero no tengo idea de cómo averiguar qué.
0 objc_msgSend
1 ??
2 _CFAutoReleasePoolPop
3 -[NSAutoReleasePool release]
4 _UIApplicationHandleEvent
5 PurpleEventCallback
6 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
7 __CFRunLoopDoSource1
8 __CFRunLoopRun
9 CFRunLoopRunSpecific
10 CFRunLoopRunInMode
11 -[UIApplication _run]
12 UIApplicationMain
13 main
algunos datos más:
- puse NSZombieEnabled, que no lo hicieron hacer una diferencia en la consola de salida
- me encontré con instrumentos utilizando el perfil fugas, didn' t muestra cualquier fugas
Gracias, Jason. ¿Supongo que te refieres a NSZombieEnabled? No hizo una diferencia en la salida de la consola. Agregué al ejecutable la variable NSAutoreleaseFreedObjectCheckEnabled = YES, tampoco marcó la diferencia en la consola. ¿Qué estoy buscando con eso? –
Estaba teniendo los mismos problemas que tú, miré por todas partes porque la ruta de pila no era útil. Terminé con tres variables de entorno. (NSZombieEnabled, NSAutoreleaseFreedObjectCheckEnabled, NSDebugEnabled) tal vez el último sea útil ... También hay solo unos pocos objetos que deberías lanzar. Actualizaré la publicación para incluirlos. –
Encontré esas variables en Debug.h, pero configurarlas en el inspector ejecutable y reiniciar el simulador no pareció marcar la diferencia. Esto tiene que ser solucionable. Tengo una liberación automática en un tableView: cellForRowAtIndexPath: en la vista que genera para la celda, pero la eliminación del mensaje de liberación automática no previno el bloqueo. –