2012-01-02 5 views
5

Conosco le basi della gestione della memoria, ma non le parti interne di come iOS gestisce i diversi tipi di dati. Qualcosa mi fa sempre rimproverare che è meglio usare uno NSData contro NSMutableData o NSString piuttosto che uno NSMutableString. C'è davvero qualche differenza di prestazioni a meno che il codice sarà in esecuzione in un ciclo di 10k o sto sprecando il mio tempo?Vale la pena convertire NSMutable <T> in NS <T>

risposta

3

Utilizzare i tipi mutabili in cui si desidera poter modificare i contenuti in posizione. Usa i tipi immutabili altrimenti.

In alcuni casi non è possibile scegliere, ad esempio l'oggetto dati che contiene i dati restituiti da un NSURLRequest: l'utilizzo di un oggetto dati mutevole è molto più semplice rispetto alla creazione di molti tipi di dati immutabili e alla loro unione alla fine.

Dopodiché, esegui il tuo codice attraverso il profiler e vedi se dovresti fare qualcosa di diverso. cioè se il sovraccarico di creare nuovi tipi immutabili per contenere oggetti è più efficiente rispetto all'utilizzo di un tipo mutabile. Qualsiasi altra cosa è un'ottimizzazione prematura.

+0

Sto davvero parlando quando ho dati che ho manipolato in un metodo e sto passando ad un altro. – Echilon

+0

@Echilon Come ho detto, dipende da cosa stai facendo. Se il metodo con cui si restituiscono i dati deve essere modificato, restituire un oggetto mutabile. Personalmente, tendo a mantenere immutabili i miei tipi di dati quando li passo in giro. Preferisco i tipi immutabili per le proprietà il più possibile. Mantiene le cose molto più sicure, e nei casi in cui i valori vengono martellati da punti diversi, rende più facile il debug. i cluster di classi mutabili/immutabili hanno i metodi 'copy' e' mutableCopy' che sono molto utili per questo. – Abizern

+1

La prima frase qui è la chiave: pensa a cosa vuoi fare con i dati. Se ha bisogno di essere mutabile, rendilo mutabile. –

0

Come hai detto la sua unica utilità se chiami usa Mutable molte volte. Ma se lo chiami solo poche volte questo non è un problema.

Si dovrebbe pensare alle alternative, ad es. in un più ampio metodo TableViews cellForRowAtIndexPath:. Utilizzare [NSString stringWithFormat:@"%@%@", fristString, secondString], anziché *foo = [[NSMutableString alloc] init] e [foo append:firstString] e così via.

+0

TableView come esempio non sembra avere molto senso a causa della memorizzazione nella cache e il riutilizzo delle celle e il rendering delle sole celle visibili. – vikingosegundo

+0

Assolutamente no, cosa succede se si crea la stringa che deve essere visualizzata tramite NSMutableString. –

+0

Non capisco il tuo punto. Il tableview viene modificato solo una volta per runloop, quindi non molto spesso. – vikingosegundo