Domanda

In sviluppo iPhone, la velocità è essenziale. Qualcuno sa se esiste una differenza di velocità tra l'utilizzo di un tipo di CoreFoundation (come CFMutableDictionaryRef) contro un tipo Foundation (la sua controparte, NSMutableDictionary).

I penserebbe che manipolando il tipo CF sarebbe più veloce, come si pretende molto hanno a buttare in giro messaggi di runtime objc, è questo un presupposto infondata, qualcuno ha in realtà guardato a questo?

È stato utile?

Soluzione

In senso tecnico, sì, è più veloce, proprio per questo motivo.

In un certo senso pratico, no, non più veloce è. Per prima cosa, la differenza di velocità è piccolo . Stiamo parlando di millisecondi salvati per tutta la durata di tutto il processo.

Il risparmio potrebbe essere più grande su iPhone, ma è ancora più o meno il guadagno più piccolo di velocità si può ottenere. Il vostro tempo è molto meglio spesi profiling la vostra applicazione in strumenti e andare dove ti dice e aggiustando il hot spot nel proprio codice.

Ed è qui che Fondazione diventa più veloce:. Il tuo di tempo

Il codice che utilizza funzionalità di rilascio automatico della Fondazione se praticabile puoi risparmiare un sacco di tempo e mal di testa, evitando perdite di memoria facilmente evitabili (vale a dire, dimenticando di scrivere o non riuscendo a raggiungere i messaggi release). CF non ha autorelease, quindi bisogna ricordarsi di tutto ciò in modo esplicito CFRelease si crea o si copiano con esso, e quando si dimentica o non riuscire a raggiungere quel codice (e intendo quando parlare -I per esperienza ), vi permetterà di trascorrere molto più tempo di caccia giù per la perdita di memoria. L'analizzatore statica aiuta, ma non sarà mai in grado di catturare tutto.

(È tecnicamente possono oggetti CF autorelease, ma il codice per farlo è terribilmente brutto e si sta solo annacquare il tuo guadagno di velocità già minuscola.)

Quindi, bastone alla Fondazione il più possibile. Non esagerare con l'autorelease; anche in puro cacao, ci sono ancora momenti in cui esplicitamente il rilascio oggetti è garantito (per lo più cicli stretti), e questo vale doppio per Cocoa Touch (iOS dal ucciderà la vostra applicazione se si alloca troppa memoria, quindi ti consigliamo di rilasciare grande oggetti come le immagini appena possibile). Ma di solito, autorelease consente di risparmiare molto più tempo di quanto CF potrà mai salvare i vostri utenti.

Il motivo non-tempo-correlato è che il codice Objective-C, con i nomi degli argomenti (dal selettore messaggio) mescolati con i valori, è molto più facile da leggere rispetto a C codice della funzione-based. Questo non può rendere il vostro lavoro andare più veloce, ma certamente rende più divertente.

Altri suggerimenti

La scrittura di codice nelle funzioni CF sarà davvero portare un incremento delle prestazioni per la vostra applicazione, ma c'è un altro approccio migliore per migliorare le prestazioni: scrivendo direttamente in assemblea avrebbe portato ancora più vantaggi di prestazioni (anche se questo è un approccio estremo) costrutti del linguaggio

ad alto livello sono preferibili a quelli di basso livello per almeno le ragioni Peter Hosey menzionati. A questo possiamo aggiungere l'ottimizzazione prematura che può facilmente portare al fallimento del progetto, come lo sviluppatore è più interessato con gli aspetti non funzionali dell'applicazione invece di quelli funzionali.

Se, dopo aver un'applicazione completamente funzionale, si sente che alcune parti del codice sono i colli di bottiglia delle prestazioni, si può cercare di ottimizzare quelli, da loro riscrittura di costrutti del linguaggio di basso livello. Avrai almeno avere un punto di confronto con il codice corrente, per assicurarsi che il codice si comporta di basso livello come previsto (o test manuali o di unità farà il trucco qui).

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