2009-02-19 6 views
5

Uso el UIImagePickerController para permitir que el usuario seleccione una imagen en mi aplicación tomando una nueva foto o seleccionando una imagen de la galería. Usando la galería, la aplicación funciona bien. Pero si utilizo la cámara como fuente, la aplicación consume mucha memoria y eventualmente muere después de volverse terriblemente lenta.UIImagePickerControllerSourceTypeCamera acumulando memoria

¿Puede alguien decirme la forma óptima de usar UIImagePickerControllerSourceTypeCamera?

Este es el código que estoy utilizando

if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    return; 
picker = [[UIImagePickerController alloc] init]; 
picker.sourceType = UIImagePickerControllerSourceTypeCamera; 
picker.delegate = self; 
[[self navigationController] presentModalViewController:picker animated:YES]; 
[picker release]; 

Respuesta

2

El UIImagePickerController pérdidas de memoria, como se ha señalado here y después de 7 u 8 usos hace que su aplicación se bloquee. Debe crear un UIImagePickerController único para la vida de su aplicación para evitar este defecto de Apple.

+1

Esa publicación de blog tiene varios meses y no he podido reproducir el error en el último sistema operativo de iPhone. Si tiene como objetivo 2.2, entonces este problema no debería preocuparlo. Si su objetivo es <2.2, téngalo en cuenta. –

3

No hay truco para usar UIImagePickerController-- usa un montón de memoria y solo tiene que vivir con eso. Liberarlo cuando hayas terminado es lo más eficiente posible.

Eso está relacionado con el selector de imágenes. La otra parte de la pregunta es qué estás haciendo con los objetos UIImage que te devuelve. Esos son objetos grandes, según los estándares del iPhone, y realmente no puede permitirse el lujo de mantener muchos de ellos en la memoria. Si está visualizando una imagen, así es la vida, pero las imágenes que no están en la pantalla se pueden descargar de manera segura en un archivo mediante UIImageJPEGRepresentation() y writeToFile de NSData: atómicamente :.

Si necesita mostrar varias imágenes, considere reducirlas. La cámara de 1600x1200 ya es mucho más grande que la pantalla, y con múltiples imágenes en pantalla es aún más excesiva. Escalar a resoluciones más bajas reduce drásticamente los requisitos de memoria. El código de muestra para hacer esto no es difícil de encontrar. Ver UIImagePickerController camera preview is portrait in landscape app por ejemplo.

0

Sé que esta respuesta es posterior al hecho, pero tuve el mismo tipo de problema que se resolvió mediante la vinculación con el iPhone SDK 2.2 y posteriores.

Cuestiones relacionadas