Tengo una aplicación SDK de iPhone que tiene varias vistas que aparecen y desaparecen a medida que el usuario crea contenido. Después de usar la aplicación en un dispositivo por un tiempo, me sale el siguiente choque:Despliegue de UIScrollView EXC_BAD_ACCESS en iOS SDK
Program received signal: “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x33369ebc in objc_msgSend()
#1 0x320e5248 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded]()
#2 0x338b4a14 in -[NSObject performSelector:withObject:]()
#3 0x320e5098 in -[UIAnimator stopAnimation:]()
#4 0x320e4b7c in -[UIAnimator(Static) _advance:]()
#5 0x320e4a34 in LCDHeartbeatCallback()
#6 0x34350e60 in HeartbeatVBLCallback()
#7 0x332e91c0 in IOMobileFramebufferNotifyFunc()
#8 0x316532f8 in ??()
#9 0x33866b50 in __CFMachPortPerform()
#10 0x338ae52a in CFRunLoopRunSpecific()
#11 0x338adc1e in CFRunLoopRunInMode()
#12 0x3434e1c8 in GSEventRunModal()
#13 0x32002c30 in -[UIApplication _run]()
#14 0x320in UIApplicationMain()
#15 0x00002ff8 in main (argc=1, argv=0x2ffff550) at /Developer/svn/MyCompany/iPhone/MyApplication/Other Sources/main.m:14
Como se puede ver en la traza, la única mención de mi código de allí es la llamada a la principal.
He ejecutado Build and Analyze de Xcode, y también lo configuré para ejecutar el analizador de clang en mi proyecto desde la Terminal, y ninguno de los dos puede encontrar ningún problema en el código. Estoy usando una versión de lanzamiento muy reciente del iOS SDK (todavía no descargué el 4.1, pero el que estoy usando es el que estaba en lanzamiento justo antes de 4.1).
Además, he ejecutado la aplicación en Instruments with the Simulator, y la aplicación no tiene pérdidas de memoria.
que voy a tratar de utilizar la variable NSZombieEnabled
y ver si se encuentra cualquier cosa, pero el problema es que necesito para usar la aplicación durante 30 a 40 minutos más o menos antes de que se estrelle, y sospecho que NSZombieEnabled
no puede incluso ayúdame a encontrar el problema.
Parece que los bloqueos que he visto es cuando una vista modal llama a un delegado en el controlador de vista principal. El controlador de vista principal luego procesa algo antes de descartar el controlador de vista modal. Hay algunas referencias en el choque a la animación y las vistas de desplazamiento, pero no estoy seguro de qué podría estar haciendo para causar problemas. ¿Alguien tiene alguna sugerencia de cosas que buscar?
EDIT: He puesto la bandera NSZombieEnabled
en la aplicación, y en el dispositivo, que viene con este mensaje en la consola:
2010-09-11 17:10:33.970 MyApplication[9321:207] ***
-[MyViewController respondsToSelector:]: message
sent to deallocated instance 0x7489480
Por lo que yo puedo decir, me he fijado Los delegados usaron en la aplicación nil en los desgloses de todas mis clases, así que estoy atascado en cuanto a dónde mirar a continuación.
He intentado utilizar el comando dirección malloc_history
pid en esto, pero dijo que no podía encontrar el proceso, he intentado 9321, 9321: 207 y 207. Además, si intenta utilizar la variable MallocStackLogging
, la programa no se ejecutará en el dispositivo, obtengo un grupo de malloc:
incapaz de crear mensajes de directorio de registro de pila en la consola y un bloqueo del programa.
Ah, y dicho sea de paso, no puedo usar los zombies que comprueban los instrumentos, ya que no parece funcionar con un dispositivo, y no puedo obtener el mismo bloqueo en el simulador.
1 no existente. Para ser explícito, las propiedades de delegado siempre deben establecerse en 'assign' y no' retain' –
. Siempre hay una excepción a la regla. Ver 'NSURLConnection' por una razón válida para retener un delegado. –
Tengo un UITableView que reside en un UIViewController, y cuando la aplicación falla, creo que se está preparando para volver a este controlador de vista. Sin embargo, el delegado para este UITableView está configurado en Interface Builder, y no se cambia en ninguna parte del código. –