2011-03-13 8 views
6

Actualmente estoy trabajando en una aplicación de iOS que le permito al usuario agregar imágenes desde su biblioteca de fotografías a la aplicación. Guardo estas imágenes en el sistema de archivos de los dispositivos, y accedo a ellas cuando las necesito (cuando están en un UIScrollView, pude acceder a ellas con bastante frecuencia)Almacenamiento de imágenes en el sistema de archivos en comparación con los datos centrales

Solo quería obtener algunas opiniones sobre este enfoque. ¿Debo seguir con el método del sistema de archivos o sería beneficioso almacenar estas imágenes I en CoreData en su lugar?

Cualquier sugerencia sobre esto sería muy apreciada.

Gracias.

Respuesta

5

No creo que Core Data realmente se haya diseñado para almacenar este tipo de datos. Hacerlo sería el equivalente moral de almacenar los datos de imagen en una base de datos SQL/relacional que tampoco es ideal.

Tengo una situación similar en la que tengo un montón de imágenes almacenadas en una ubicación objetiva (mi lista de imágenes nunca cambia, así que las incluyo todas en el paquete de aplicaciones) con una tienda Core Data que contiene muchos metadatos sobre las imágenes. Todo lo que guardo en los datos centrales de la imagen es el nombre del archivo y luego mezclo la ruta completa del archivo durante el tiempo de ejecución cuando finalmente es hora de ver la imagen. No tengo ningún problema con el tiempo de retraso o retrasos.

Aunque no estoy mostrando las imágenes en UIScrollView, todavía creo que tendrías poco problema para obtener la matriz de información de imágenes del almacén de datos centrales y generar la ruta de archivo completa sobre la marcha a medida que se generan las células ya que son solo cadenas y el código para generar el UIImage es muy compacto. Eso o generar la misma matriz de información, y luego compilar una matriz de rutas de imágenes antes de que se generen las celdas, como cuando el UIScrollView está a punto de aparecer.

0

Creo que ponerlos en los datos básicos será lento. El sistema de archivos va a ser mucho más rápido.

+0

He leído lo mismo, solo estaba tratando de medir la experiencia de las personas al hacer esto. En general, me parece bastante rápido, hasta que agrego un montón de imágenes, luego se ralentiza y tengo que reiniciar la aplicación para recuperar mi velocidad. Estaba pensando que era un problema de memoria, pero no veo ninguna fuga (ni siquiera en los instrumentos), así que tendré que cavar más profundo. Gracias por su respuesta. Voy a mantener esto abierto por un tiempo, si no escucho de nadie más en un momento, lo marcaré como la respuesta. – jabroni

3

Debe utilizar el método del sistema de archivos para algo más grande que una miniatura.

Por un lado, si almacena en Core Data tiene que almacenarlo tiene datos o un atributo transformable. En cualquier caso, tiene un paso adicional para convertir a la imagen. Si almacena un archivo, puede usar el UIImage para cargarlo directamente.

El principal problema, sin embargo, es el uso de la memoria, una imagen con fallas no se borrará de la memoria como lo hará un UIImage.

Actualización 2012-09-20: Esta respuesta se ha quedado obsoleta. Core Data no tiene su propio sistema para almacenar grandes cantidades de datos, como imágenes en archivos externos.

+1

Cómo entender "la imagen con fallas no se borrará de la memoria como lo hará un UIImage". –

+0

Y mi miniatura es de alrededor de 20 ~ 40 kb, pero la cantidad de miniaturas podría ser de miles, lo que depende del usuario. ¿Debo guardar la foto en el archivo? PD. todas las fotos se subirán a un servidor. –

Cuestiones relacionadas