Pregunta

Soy bastante nuevo en la programación de iOS y estoy luchando por decidir cuál es la mejor manera de codificar objetos intensivos de memoria utilizando el protocolo NSCODING.

Tengo una gran cantidad de objetos de elementos. Cada elemento tiene numerosas imágenes de alta resolución asociadas con él. Además, cada elemento pertenece a una Categoría de elementos, que puede contener 100 elementos.

Por lo que puedo decir, tengo un par de opciones de codificación diferentes:

  1. Codifica todo el objeto itemCategory
  2. Elimine la clase itemCategory, cree solo una propiedad itemCategory para cada elemento y simplemente codifique los objetos de elementos individuales.

Me parece que el #1 sería descuidado. Para agregar un nuevo elemento a la categoría de elementos, tendría que decodificar la categoría de elementos completa (lo que significa decodificar esas cientos de imágenes vinculadas a los elementos que contiene también), agregar el elemento y luego volver a codificar todo (De nuevo, junto con todas esas imágenes).

Pero, el n. ° 1 parece ser la forma correcta de hacerlo desde un punto de vista de estructura de código. El #2 me obliga a encontrar una forma menos intuitiva para almacenar elementos y asociarlos con sus respectivas categorías de elementos.

Si tuviera que ir con el #1, ¿hay alguna manera de decodificar solo ciertas partes de los objetos, para que no termine con todas esas imágenes que se inicializan cuando en realidad no necesito mostrarlas? Un pensamiento que se me ocurrió es no codificar las UIImages del elemento junto con el elemento en sí, sino solo el nombre de la imagen. De esa manera, la imagen solo se inicializaría cuando sea necesario, y podría liberarse sin liberar todo el elemento si así lo desea. Supongo que este es una especie de enfoque de la base de datos relacional.

Siento que debe haber una forma estándar de manejar una situación como esta, ¿no?

¿O mi miedo sobre el consumo de memoria es infundado? Quizás esto podría verse como un ejemplo de "optimización prematura", pero la decisión que tomo ahora afectará profundamente la estructura de datos de la aplicación. Cambiar de la opción #1 al #2 en el futuro no sería bonito :)

¿Fue útil?

Solución

Quizás puedas usar coredata y una tienda persistente. Coredata facilita la gestión de las relaciones. Puede crear entidades que tengan relaciones administradas por el sistema. Entonces, en su caso, tal vez pueda tener 3 entidades: categoría, elemento e imágenes, y una relación entre categoría y elementos, y una relación entre elementos e imágenes, lo que significa que cada categoría puede tener múltiples elementos , y cada elemento tiene varias imágenes, luego, cuando lo necesita, puede crear nuevas imágenes y agregarlas a un elemento en particular, o buscar todas las imágenes dentro de un elemento.

Espero que esto haya sido claro, pero Coredata es excelente para administrar las relaciones y es muy fácil trabajar con el modelo de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top