Question

Je travaille sur une application iPhone que nous localisons en anglais et en japonais pour notre version initiale. Nous appelons fréquemment NSLocalizedString () pour charger la chaîne localisée appropriée à afficher. Est-il généralement préférable de sauvegarder les chaînes localisées dans les variables d'instance pour la prochaine fois où nous en avons besoin, ou suis-je en train d'effectuer une micro-optimisation ici et devrais-je simplement recharger la chaîne à chaque fois que cela est nécessaire?

Était-ce utile?

La solution

C’est l’un de ceux-ci "ça dépend" réponses.

L'appel de NSLocalizedString implique d'effectuer une recherche dans le bundle. Ces recherches sont assez rapides mais pas gratuites. Que ce soit pour mettre en cache cette valeur de retour ou simplement pour appeler NSLocalizedString, cela dépend de la manière dont il est utilisé.

  1. Si vous passez le retour à la champ de texte de quelque chose comme un UILabel ou UITableViewCell puis le la recherche ne se produira que lorsque vous d'abord définir la propriété.

  2. Si vous l'utilisez dans un drawRect appelez alors la recherche sera seulement se produire lorsque votre vue doit être repeint qui pourrait être souvent, rarement, ou jamais.

  3. Si vous l'utilisez dans une interface de jeu où l'écran est redessiné chaque image alors pour quelques éléments d'interface utilisateur ces des recherches pourraient se produire des centaines de fois chaque seconde.

Je dirais que pour quelque chose comme le numéro 3, vous devriez commencer par mettre en cache les résultats.

Pour les autres, écrivez-les de la manière qui vous convient le mieux. Si vous rencontrez des problèmes de performances dans votre interface utilisateur, utilisez Instruments pour en réduire la cause. Si c'est NSLocalizedString, optimisez-le en conséquence.

Autres conseils

Micro-optimisation. Faites-le d'abord fonctionner, puis corrigez-le, puis vite. Et lorsque vous arrivez à l'étape 3, exécutez Shark (ou Instruments), puis suivez ses instructions.

Je soupçonne que vous ne subissez pas trop de problèmes de performances. NSLocalizedString (clé, commentaire) est une macro qui se convertit en

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

Sans analyse comparative, je n'ai aucune idée du prix que cela coûte, mais je suppose que ce n'est pas si grave. Mon sentiment est que cela ne sera pas un goulot d'étranglement en termes de performances, mais vous pouvez toujours exécuter Shark ou Instruments et voir par vous-même lorsque vous exécutez votre application sur le périphérique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top