Должен ли я сохранить строки, возвращенные NSLocalizedString ()? - PullRequest
5 голосов
/ 02 марта 2009

Я работаю над приложением для iPhone, которое мы локализуем на английском и японском языках для нашего первого выпуска. Мы часто вызываем NSLocalizedString(), чтобы загрузить соответствующую локализованную строку для отображения. Как правило, лучше ли сохранять локализованные строки в переменных экземпляра в следующий раз, когда они нам понадобятся, или я здесь микрооптимизирую, и мне следует просто перезагружать строку каждый раз, когда это необходимо?

Ответы [ 3 ]

7 голосов
/ 02 марта 2009

Micro-оптимизации. Сначала заставьте это работать, затем сделайте это правильно, затем сделайте это быстро. И когда вы перейдете к шагу 3, запустите Акулу (или Инструменты), затем следуйте ее указаниям.

7 голосов
/ 02 марта 2009

Это один из тех ответов "все зависит".

Вызов NSLocalizedString включает в себя поиск в пакете. Эти поиски довольно быстрые, но не бесплатные. Кэширование этого возвращаемого значения или просто удобство вызова NSLocalizedString будет зависеть от того, как оно используется.

  1. Если вы проходите возврат к текстовое поле что-то вроде UILabel или UITableViewCell, то поиск будет происходить только тогда, когда вы сначала установите свойство.

  2. Если вы используете его в drawRect позвоните, то поиск будет только произойдет, когда ваш взгляд должен быть перекрашивается, что может быть часто, нечасто или никогда.

  3. Если вы используете его в игровом интерфейсе, где экран перерисовывается каждый кадр затем для нескольких элементов пользовательского интерфейса эти поиски могут происходить сотни раз в секунду.

Я бы сказал, что для чего-то вроде # 3 вы должны начать с кэширования результатов.

Для остальных напишите их наиболее удобным для вас способом, и, если у вас есть проблемы с производительностью в вашем пользовательском интерфейсе, используйте инструменты, чтобы сузить причину. Если это NSLocalizedString, оптимизируйте его соответствующим образом.

1 голос
/ 02 марта 2009

Я подозреваю, что вы не слишком сильно страдаете от производительности. NSLocalizedString (ключ, комментарий) - это макрос, который преобразуется в

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

Без бенчмаркинга я понятия не имею, насколько это дорого, но подозреваю, что это не так уж плохо. Мне кажется, что это не будет для вас узким местом в производительности, но вы всегда можете запустить Shark или Instruments и убедиться в этом, когда запускаете приложение на устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...