Devo salvar cordas retornados por NSLocalizedString ()?
-
03-07-2019 - |
Pergunta
Eu estou trabalhando em um aplicativo para iPhone que estamos localizando tanto em Inglês e Japonês para o nosso lançamento inicial. Nós freqüentemente chamada NSLocalizedString()
para carregar a cadeia adequada localizada para exibição. É geralmente melhor para salvar as cadeias localizadas em variáveis ??de instância para a próxima vez que precisar deles, ou estou micro-otimização aqui e devo apenas recarregar a seqüência de cada vez que é necessário?
Solução
Este é um daqueles "depende" respostas.
Chamando NSLocalizedString envolve a execução de uma pesquisa no pacote. Estas pesquisas são bastante rápido, mas não é livre. Quer para armazenar em cache este valor de retorno ou apenas têm a conveniência de chamar NSLocalizedString vai depender de como ele é usado.
-
Se você está passando o retorno ao textfield de algo como uma UILabel ou UITableViewCell então o lookup só ocorrerá quando você primeiro defina a propriedade.
-
Se você estiver usando-lo em um drawRect chamar, em seguida, a pesquisa só irá acontecer quando a sua visão precisa ser repintado que poderia ser, muitas vezes, raramente, ou nunca.
-
Se o seu usá-lo em um jogo onde UI a tela é redesenhada cada frame seguida por alguns elementos da interface estes pesquisas poderia estar acontecendo centenas de vezes a cada segundo.
Eu diria que algo como # 3 você deve começar com cache os resultados.
Para os outros, escrevê-los da maneira que for mais conveniente e se você tiver problemas de desempenho em seu uso UI Instruments para reduzir a causa. Se é NSLocalizedString seguida, otimizá-lo em conformidade.
Outras dicas
Micro-otimização. Primeiro fazê-lo funcionar, em seguida, fazê-lo direito, em seguida, torná-lo rápido. E quando você começa a etapa 3, execute Shark (ou Instruments), em seguida, segue a sua orientação.
Eu suspeito que você não tomar demasiado de um acerto de desempenho. NSLocalizedString (key, comentário) é uma macro que se converte em
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
Sem aferição, não tenho idéia de como caro este é, mas eu suspeito que não é muito ruim. Meu sentimento é que este não será um gargalo de desempenho para você, mas você sempre pode executar tubarão ou Instruments e veja por si mesmo quando você executar o aplicativo no dispositivo.