Domanda

Sono abbastanza nuovo per la programmazione iOS e sto lottando per decidere su quale sia il modo migliore per gli oggetti intensivo di memoria che utilizzano il protocollo di codifica NSCoding.

Ho un gran numero di oggetti Item. Ogni elemento ha numerose immagini ad alta risoluzione ad esso associati. Inoltre, ogni elemento appartiene a un Items, che può contenere 100 voci.

Per quanto posso dire, ho un paio di diverse opzioni di codifica:

  1. codificare l'intero oggetto Items
  2. Eliminare la classe Items, creare semplicemente una proprietà Items per ogni elemento, e solo codificare i singoli oggetti Item.

Mi sembra che # 1 sarebbe dispendiosamente costoso. Per aggiungere un nuovo elemento alla Items, avrei dovuto decodificare l'intero Items (quali mezzi di decodifica quelle centinaia di immagini legate ai prodotti che esso contiene pure), aggiungere la voce, e poi ri-codificare il tutto (ancora una volta, insieme a tutte quelle immagini).

Ma, 1 # sembra essere il modo corretto per farlo da un punto di codice-struttura di vista. # 2 mi costringe a venire con un modo meno intuitivo per riporre oggetti e associandoli con i loro rispettivi ItemCategories.

Se dovessi andare con # 1, c'è un modo per decodificare solo alcune parti di oggetti, in modo che io non finire con tutte quelle immagini sempre inizializzate quando io in realtà non bisogno di visualizzare loro? Un pensiero che mi venne in mente è quello di non realtà codificare UIImages dell'elemento insieme con l'elemento stesso, ma piuttosto solo il nome dell'immagine. In questo modo, l'immagine sarebbe ottenere inizializzato solo quando è necessario, e potrebbe essere rilasciato senza rilasciare l'intero lotto se lo si desidera. Suppongo che questo è una specie di un tipo di database relazionale di approccio.

mi sento come se ci deve essere un modo standard per la gestione di una situazione come questa, no?

O è la mia paura più di consumo di memoria infondata? Forse questo potrebbe essere visto come un esempio di "ottimizzazione prematura", ma la decisione che prendo ora sarà profondamente influenzare la struttura dei dati dell'applicazione. Il passaggio da opzione # 1 a # 2 lungo la strada fosse scadente abbastanza:)

È stato utile?

Soluzione

Forse si può usare CoreData, e un persistentStore. CoreData rende facile gestire le relazioni. È possibile creare le entità che hanno relazioni che vengono gestite dal sistema. Quindi nel tuo caso, forse si può avere un 3 soggetti: Categoria, Voce e immagini, e quello ai molti rapporto tra categoria e gli elementi, e quello ai molti rapporto tra voce e le immagini, il che significa che ogni categoria può avere più elementi e ogni prodotto ha diverse immagini, poi, quando hai bisogno di yo è possibile creare nuove immagini e aggiungerli a un elemento particolare, o la ricerca di tutte le immagini all'interno di un elemento.

Spero che questo era chiaro, ma CoreData è grande per i rapporti di gestione e il modello di dati è molto facile da lavorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top