Domanda

Sto lavorando su un'app per iPhone che stiamo localizzando in inglese e giapponese per la nostra versione iniziale. Chiamiamo spesso NSLocalizedString () per caricare la stringa localizzata appropriata per la visualizzazione. In genere è meglio salvare le stringhe localizzate nelle variabili di istanza per la prossima volta che ne abbiamo bisogno, oppure sto eseguendo una micro-ottimizzazione qui e devo ricaricare la stringa ogni volta che è necessaria?

È stato utile?

Soluzione

Questa è una di quelle "dipende". risposte.

La chiamata a NSLocalizedString implica l'esecuzione di una ricerca nel pacchetto. Queste ricerche sono piuttosto veloci ma non gratuite. Se memorizzare nella cache questo valore di ritorno o semplicemente avere la comodità di chiamare NSLocalizedString dipenderà dal modo in cui viene utilizzato.

  1. Se stai passando il ritorno a campo di testo di qualcosa come un UILabel o UITableViewCell quindi il la ricerca avverrà solo quando tu prima imposta la proprietà.

  2. Se lo stai usando in un drawRect chiama quindi solo la ricerca succede quando la tua vista deve essere ridipinto che potrebbe essere spesso, raramente o mai.

  3. Se lo usi in un'interfaccia utente di gioco dove lo schermo viene ridisegnato ogni fotogramma quindi per alcuni elementi dell'interfaccia utente questi potrebbero esserci centinaia di ricerche di volte al secondo.

Direi che per qualcosa come il n. 3 dovresti iniziare con la memorizzazione nella cache dei risultati.

Per gli altri, scrivili nel modo più conveniente e se hai problemi di prestazioni nella tua UI usa Strumenti per restringere la causa. Se è NSLocalizedString, ottimizzalo di conseguenza.

Altri suggerimenti

Micro-ottimizzazione. Per prima cosa fallo funzionare, poi fallo nel modo giusto, quindi fallo velocemente. E quando arrivi al passaggio 3, esegui Shark & ??nbsp; (o Strumenti), quindi segui le sue indicazioni.

Sospetto che non ti prendi troppo di un colpo di performance. NSLocalizedString (chiave, commento) è una macro che converte in

[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

Senza benchmarking, non ho idea di quanto sia costoso, ma sospetto che non sia poi così male. La mia sensazione è che questo non sarà un collo di bottiglia nelle prestazioni per te, ma puoi sempre eseguire Shark o Instruments e vedere di persona quando esegui l'applicazione sul dispositivo.

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