2012-01-27 10 views
6

Tengo una situación extraña. Tengo un proceso bastante intenso de memoria (procesamiento de imágenes) en ejecución, pero he resuelto todos los problemas y funciona perfectamente el 99% del tiempo.iOS La aplicación se cuelga de la advertencia de memoria después de regresar del fondo, pero no antes?

Sin embargo, si puse la aplicación en un estado inactivo o de fondo, al volver e intentar ejecutar el mismo proceso recibo advertencias de memoria y luego la aplicación falla.

He utilizado instrumentos para analizar la huella de memoria en los dos casos de uso y la huella de memoria es exactamente la misma. Sin embargo, en el caso de que no coloque la aplicación en segundo plano (o inactiva), no me da ningún error de memoria y se completa correctamente. En el caso de uso en el que se puso en segundo plano (o inactivo), recibo errores de memoria y se bloquea.

¿Alguien tiene alguna información sobre esto? He estado revisando net/irc/stack over/apple docs tratando de resolver esto. ¿Apple (iOS) reduce la cantidad de memoria con la que se puede ejecutar mi aplicación cuando regreso del fondo? hay alguna forma de prevenir esto? ¿O estoy pasando por alto alguna otra solución más simple?

(Nota, no hay pérdidas de memoria)

+0

Agregue el mensaje de error a su Q. – mit3z

+0

No hay un mensaje de error ya que es un error de memoria baja que causa el bloqueo. –

+0

¿Hace algo en los métodos de delegado de su aplicación al ingresar o salir del primer plano/renunciar/estar activo? – jrturton

Respuesta

2

Alright lo descubrió - iOS no está haciendo nada estúpido, fue por supuesto el desarrollador :) Hubo otro componente (ViewController) en mi proyecto que hizo algunas cosas cuando regresaba del fondo, como la asignación de memoria. Sin embargo, esta vista no estaba activa, por lo que asignar la memoria que necesitaba resultó ser inútil. Después de limpiar el código no me encontré con ningún error de memoria.

0

Tal vez su aplicación está recibiendo advertencias de memoria, mientras que en el fondo, y sus respuestas a esta son diferentes: por ejemplo, en el fondo todos los controladores de vista pueden tener su contenido descargado cuando se recibe una advertencia de memoria, pero en primer plano, su controlador de vista activa no se descargará. Podría terminar enviando mensajes a las instancias desasignadas, por ejemplo, si un controlador de vista o uno de sus objetos está configurado para ser el delegado de algún otro proceso en su aplicación que no responda a las advertencias de memoria baja.

Si conoces los detalles de los bloqueos, que realmente deberías incluir, y más sobre la estructura de la aplicación, esta es mi mejor suposición.

+0

No recibo ningún error de memoria mientras esté en segundo plano, y las vistas se cargan cuando reanudo la aplicación. Pero cuando presiono "ir" en mi aplicación para comenzar a procesar la imagen, se bloquea debido a la poca memoria, pero solo después de regresar del fondo. –

+0

(Estoy trabajando con Spongey en esto también) Sí, el problema no es que la aplicación se cuelgue mientras está en segundo plano, vuelve al primer plano genial, el problema es que luego cuando vayamos a usar la aplicación se bloquea debido a una situación de poca memoria. Si hacemos exactamente el mismo comportamiento pero sin una aplicación rápida que se desconecte primero, funciona bien, ni una sola advertencia. – Shizam

+0

Entonces, ¿cómo responde su aplicación a las advertencias de memoria baja? ¿De qué te deshaces? – jrturton

2

Solo para comprobarlo, al iniciar cualquier proceso en segundo plano, debe estar en el grupo de liberación automática. Los procesos en segundo plano se ejecutan en paralelo con el hilo principal. Por lo tanto, al realizar cualquier tarea en el fondo debemos mirar la memoria. Este es un error común que a menudo se encuentra para la fuga. Además, las operaciones que se ocupan de UIKit siempre se ejecutan en el hilo principal. Entonces, si procesa cualquier dato a través del fondo & quiere mostrarlo en la interfaz de usuario, entonces eso se cargará en el hilo principal.

Cuestiones relacionadas