Должен ли я сохранять строки, возвращаемые NSLocalizedString()?

StackOverflow https://stackoverflow.com/questions/600770

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Это один из тех ответов «это зависит».

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

  1. Если вы передаете возвращение в текстовое поле чего -то вроде Uilabel или Uitableviewcell, то поиск произойдет только тогда, когда вы сначала установите свойство.

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top