Pregunta

Estoy trabajando en una aplicación para iPhone que estamos localizando tanto en inglés como en japonés para nuestra versión inicial. Con frecuencia llamamos a NSLocalizedString () para cargar la cadena localizada adecuada para su visualización. En general, ¿es mejor guardar las cadenas localizadas en las variables de instancia para la próxima vez que las necesitemos, o estoy haciendo una micro-optimización aquí y debo recargar la cadena cada vez que sea necesario?

¿Fue útil?

Solución

Este es uno de esos " depende " respuestas.

Llamar a NSLocalizedString implica realizar una búsqueda en el paquete. Estas búsquedas son bastante rápidas pero no gratuitas. Si almacenar en caché este valor de retorno o simplemente tener la conveniencia de llamar a NSLocalizedString dependerá de cómo se use.

  1. Si está pasando el retorno a la campo de texto de algo así como un UILabel o UITableViewCell entonces el la búsqueda solo ocurrirá cuando Primero establece la propiedad.

  2. Si lo estás utilizando en un drawRect llamar entonces la búsqueda solo suceder cuando tu vista necesita ser repintado que podría ser a menudo, con poca frecuencia, o nunca.

  3. Si lo estás usando en una interfaz de usuario del juego donde La pantalla se vuelve a dibujar cada fotograma. entonces por unos pocos elementos de la interfaz de usuario estos búsquedas podrían estar sucediendo cientos de veces cada segundo.

Yo diría que para algo como el # 3 deberías comenzar con el almacenamiento en caché de los resultados.

Para los demás, escríbalos de la manera que sea más conveniente y si tiene problemas de rendimiento en su interfaz de usuario, use los instrumentos para reducir la causa. Si es NSLocalizedString, optimícelo en consecuencia.

Otros consejos

Micro-optimización. Primero haz que funcione, luego hazlo bien, luego hazlo rápido. Y cuando llegue al paso 3, ejecute Shark & ??nbsp; (o Instrumentos), luego siga sus instrucciones.

Sospecho que no recibes demasiado impacto en el rendimiento. NSLocalizedString (clave, comentario) es una macro que se convierte a

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

Sin la evaluación comparativa, no tengo idea de lo costoso que es esto, pero sospecho que no está tan mal. Creo que esto no será un cuello de botella de rendimiento para usted, pero siempre puede ejecutar Shark o Instruments y comprobarlo usted mismo cuando ejecute su aplicación en el dispositivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top