2009-12-04 14 views
5

Tengo una aplicación para el iphone. Parece funcionar bien. Cuando me conecto a un iphone provisto de Xcode y ejecuto la aplicación, el registro de la consola en la ventana de Organizador siempre se queja de un error de segmentación al salir de la aplicación con la tecla de inicio.Señal 11, falla de segmentación en la salida de la aplicación iphone

¿Alguien más ha visto esto y tiene una idea de cuál podría ser el problema? Utilizo un hilo para cargar páginas web en el entorno, pero detengo el hilo al salir.

Mi aplicación guarda información persistente. Cuando uso la función de compilación y análisis obtengo unas 2 fugas potenciales de memoria, pero en cada caso estoy asignando un objeto y manteniéndolo en una matriz.

¿Alguna idea, o es esto normal?

+1

NSZombieEnabled realmente me ayudó a encontrar un accidente que no pude encontrar antes. – BastiBen

Respuesta

7

Intenta ejecutar tu aplicación con NSZombieEnabled. Esto le dirá si está por liberar cualquier objeto. Para habilitar zombis hacen lo siguiente:

  1. Choose Project > Edit Active Executable to open the executable Info window.
  2. Click Arguments.
  3. Click the add (+) button in the “Variables to be set in the environment” section.
  4. Enter NSZombieEnabled in the Name column and YES in the Value column.
  5. Make sure that the checkmark forthe NSZombieEnabled entry is selected.
+0

Con NSZombieEnabled, ¿dónde debo establecer un punto de interrupción para detectar el problema? Con esta configuración, el programa termina temprano con el mensaje: CFString liberación automática: mensaje enviado a instancia desasignada. Me gustaría romper cuando el mensaje se envía a una cadena desasignada, por lo que puedo averiguar qué cadena. Gracias, Gerry – Gerry

+0

Con Zombies habilitados. Mi código falla dentro de la línea [analizador sintáctico] del código a continuación. Este bit ocurre en un NSThread. Cualquier idea sobre lo que causaría un problema. Mi rutina foundCharacters no se golpea. Gracias, Gerry (código en el comentario siguiente) – Gerry

+0

NSURL * nsurl = [NSURL URLWithString: consulta]; \t NSURLRequest * request = [petición NSURLRequestWithURL: nsurl]; \t \t data = [NSURLConnection sendSynchronousRequest: request returningResponse: & error de respuesta: & error]; \t \t NSXMLParser * parser = [[NSXMLParser alloc] initWithData: data]; \t [parser setDelegate: self]; \t [parser setShouldProcessNamespaces: NO]; \t [parser setShouldReportNamespacePrefixes: NO]; \t [parser setShouldResolveExternalEntities: NO]; \t errorStr = nil; \t if ([análisis sintáctico] == SÍ) // cosas – Gerry

0

Al salir, su aplicación puede sobrescribir un objeto, intente volcar cada objeto antes de liberarlo o realice alguna depuración en el método dealloc.

0

Quizás esté liberando algún objeto más veces que su conteo de retención. Comente -release llamadas en sus métodos dealloc (o en otro lugar) hasta que encuentre al culpable.

Luego elimine el comentario de esa llamada y busque en otro lugar de su código donde está tratando de liberar ese objeto en exceso.

Si está utilizando métodos de conveniencia, por ejemplo, (por ejemplo [NSString stringWithFormat:@"..."]) en contraposición a alloc-init métodos (por ejemplo [[NSString alloc] initWithFormat:@"..."]) es autoreleased el objeto conveniencia resultante y no debe ser liberado manualmente.

0

Mi problema era uididfaker y locationholic desde Cydia, y después de ellos desinstalar plazo Xcode en mi iphone bien.

Cuestiones relacionadas