Estoy trabajando en una aplicación de iPhone que estamos traduciendo en inglés y japonés para nuestra versión inicial. Con frecuencia llamamos al NSLocalizedString()
para cargar la cadena localizada apropiada para visualizar. ¿Es generalmente mejor guardar las cadenas localizadas en variables de instancia para la próxima vez que las necesitamos, o estoy micro-optimizando aquí y debería simplemente volver a cargar la cadena cada vez que sea necesario?¿Debo guardar cadenas devueltas por NSLocalizedString()?
Respuesta
Esta es una de esas respuestas "depende".
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.
Si va a ceder el retorno al campo de texto de algo así como un UILabel o UITableViewCell entonces la búsqueda sólo ocurrirá cuando se configura por primera la propiedad.
Si se está usando en una llamada drawRect continuación, la búsqueda sólo se ocurrir cuando su vista necesita ser repintado que podría ser a menudo, con poca frecuencia o nunca.
Si su uso en un juego en el que la interfaz de usuario la pantalla se vuelve a dibujar cada cuadro entonces por unos elementos de la interfaz estas búsquedas podrían estar sucediendo cientos de veces cada segundo.
Yo diría que para algo como # 3 debe comenzar con el almacenamiento en caché de los resultados.
Para los demás, escríbalos de la manera más conveniente y si tiene problemas de rendimiento en su UI, use los instrumentos para reducir la causa. Si es NSLocalizedString, optimícelo en consecuencia.
Sospecho que no se aprovecha demasiado de un golpe de rendimiento. NSLocalizedString (clave, comentario) es una macro que convierte a
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
Sin evaluación comparativa, no tengo idea de lo caro que es, pero sospecho que no es demasiado malo. Tengo la sensación de que esto no será un cuello de botella para el rendimiento, pero siempre puedes ejecutar Shark o Instruments y ver por ti mismo cuando ejecutas tu aplicación en el dispositivo.
Micro optimizando. Primero haz que funcione, luego hazlo bien, luego hazlo rápido. Y cuando llegue al paso 3, ejecute Shark (o Instruments), luego siga sus instrucciones.
- 1. ¿Debo cerrar las cadenas devueltas por Assembly.GetManifestResourceStream?
- 2. Cómo encontrar cadenas sin traducir. NSLocalizedString()
- 3. Convertir cadenas devueltas (YYYYMMDD) a la fecha
- 4. Unit Testing iPhone Code que usa NSLocalizedString
- 5. Macro para NSLocalizedString
- 6. Marcador de posición y NSLocalizedString
- 7. ¿Debo guardar una referencia a FileSystemWatcher?
- 8. ¿Debo guardar en plist o Core Data?
- 9. ¿Debo crear una tubería para guardar archivos con scrapy?
- 10. NSLocalizedString: ¿Por qué las genstrings agregan 1 $ y 2 $ a mis especificadores de formato?
- 11. Escritura/salida de cadenas HTML sin guardar
- 12. ¿Debo evitar cadenas mágicas como sea posible?
- 13. ¿Cómo cuento el número de filas devueltas por subconsulta?
- 14. SQLAlchemy ORM: modificar las columnas devueltas por una consulta
- 15. Cómo truncar líneas coincidentes largas devueltas por grep o ack
- 16. ¿Cómo limitar las columnas devueltas por la consulta de Django?
- 17. Posible usar variables y/o parámetros con NSLocalizedString?
- 18. Cambiar el idioma de NSLocalizedString() en tiempo de ejecución
- 19. ¿Cómo debo manejar cadenas Interning en deserialización?
- 20. PostgreSQL cambiando filas devueltas orden
- 21. elasticsearch número de facetas devueltas
- 22. ¿Cómo debo escribir comentarios XML para evitar repetirme entre el resumen y las etiquetas devueltas?
- 23. ¿Cuál es el segundo parámetro de NSLocalizedString()?
- 24. ¿Por qué algunas zonas horarias devueltas por GetSystemTimeZones no encontradas por FindSystemTimeZoneById?
- 25. ¿Dónde debo guardar la clave de acceso en rails3?
- 26. ¿Con qué frecuencia debo guardar en Core Data?
- 27. ¿Qué tipo de variable debo usar para guardar una imagen?
- 28. ¿Por qué las cadenas se llaman "cadenas"?
- 29. ¿Debo manualmente guardar managedObjectContext para NSFetchedResultsController si cambio algún atributo?
- 30. Guardar una lista de arrays de Cadenas para preferencias compartidas