2011-03-17 13 views
5

Estoy teniendo efectos extraños con mi aplicación. Implementé mi propio visor de PDF. Muestra UNA página a la vez. Usando el Monitor de actividad de instrumentos Veo que mi memoria real está constantemente en alrededor de 50MB. Después de cambiar páginas adelante y atrás un par de veces, recibo un nivel de advertencia de memoria 0. Hago mi mejor esfuerzo para reaccionar y sacrificar la imagen de fondo de baja resolución que estoy renderizando primero para mostrar algo hasta que CATiledLayer se ponga al día. No ayuda. Unas pocas páginas más tarde obtengo un nivel de advertencia de memoria 1 y un nivel 2 y después de algunas páginas más mi aplicación se mata con el motivo "9". ¡La memoria NUNCA supera los 50MB!¿Por qué mi aplicación está recibiendoReceiveMemoryWarning y se mata aunque la memoria es constante y hay suficiente memoria disponible?

¿Por qué recibo esas advertencias en primer lugar? HAY suficiente memoria disponible.

Esto sucede en el iPad con iOS 4.3.

+0

Ha intentado ejecutar su aplicación a través de la herramienta de detección de fugas. – JeremyP

+0

No, pero si hubiera filtraciones, ¿no seguiría subiendo la memoria utilizada? Se mantiene en un nivel constante. Además: la detección de fugas no puede ocuparse de la recolección de basura de MonoTouch. :-( – Krumelur

+0

No lo sé. Tal vez el monitor de actividad no informa correctamente la cantidad de memoria utilizada. Quizás no. Considerando que los iPads tienen 256Mb de RAM, 50Mb parece mucho. – JeremyP

Respuesta

2

No creo que haya nada misterioso pasando aquí, lo que estoy seguro es que no es lo que quería escuchar. No hay cifras absolutas de cantidades "seguras" de memoria para usar. La regla es: cuando el SO le dice que está usando demasiado, use menos. Deshará primero los procesos en segundo plano y con preferencia a su aplicación de primer plano, pero todavía hay límites.

En los "viejos tiempos" solías tener suerte de obtener 20Mb. Estoy seguro de que puede obtener más que eso con seguridad en un iPad pero, aparentemente, es inferior a 50Mb.

No dice la cantidad de memoria que libera al liberar la imagen de fondo, pero parece que debe almacenar en caché menos datos. También es posible que desee comprobar las fugas (también en instrumentos) para asegurarse de que está liberando los objetos que cree que es.

+0

Estoy de acuerdo, no hay misterio involucrado aquí. Pero mi problema es que estoy funcionando bien con 50MB y el nivel de memoria es constante y después de hacer lo mismo 5 veces, de repente recibo la advertencia La memoria no ha cambiado. Si hay fugas, ¿no continuaría el consumo de memoria? – Krumelur

+0

No sabemos cómo determina iOS cuando se está quedando sin memoria . Mi suposición es que 50Mb es demasiado y algo que estás haciendo en tus "cinco cosas" simplemente lo empuja al límite. –

+0

Acepté tu respuesta b/c del "no misterio" :-) La razón fue de hecho tha ¡Lancé todo menos UIScrollView! A veces es tan fácil pero difícil de detectar. – Krumelur

Cuestiones relacionadas