我应该保存NSLocalizedString()返回的字符串吗?

时间:2009-03-01 23:11:34

标签: iphone cocoa cocoa-touch

我正在制作一款iPhone应用程序,我们在初始版本中使用英语和日语进行本地化。我们经常调用NSLocalizedString()来加载适当的本地化字符串以供显示。通常情况下,将本地化字符串保存在实例变量中是为了下次我们需要它们,还是我在这里进行微优化,我是否应该在每次需要时重新加载字符串?

3 个答案:

答案 0 :(得分:7)

微优化。首先使它工作,然后使其正确,然后快速。当你进入第3步,运行Shark(或乐器),然后按照它的指导。

答案 1 :(得分:7)

这是“依赖”答案之一。

调用NSLocalizedString涉及在bundle中执行查找。这些查找非常快,但不是免费的。是否缓存此返回值或只是调用NSLocalizedString的便利取决于它的使用方式。

  1. 如果您将返回通过 类似于文本字段 然后是UILabel或UITableViewCell 查找只会在你发生时发生 首先设置属性。

  2. 如果您在drawRect中使用它 然后调用只会查找 当您的视图需要时发生 经常重新粉刷, 很少,或从不。

  3. 如果您在游戏UI中使用它 屏幕每帧重绘一次 然后为这几个UI元素 查找可能会发生数百次 每秒一次。

  4. 我会说,对于像#3这样的东西,你应该从缓存结果开始。

    对于其他人,请以最方便的方式编写它们,如果您的UI中存在性能问题,请使用Instruments缩小原因。如果它是NSLocalizedString,那么相应地优化它。

答案 2 :(得分:1)

我怀疑你没有太多的性能打击。 NSLocalizedString(key,comment)是一个转换为

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

如果没有基准测试,我不知道这有多贵,但我怀疑它并不太糟糕。我的感觉是,这不会成为您的性能瓶颈,但您可以随时运行Shark或Instruments,并在设备上运行应用程序时自行查看。