我正在制作一款iPhone应用程序,我们在初始版本中使用英语和日语进行本地化。我们经常调用NSLocalizedString()
来加载适当的本地化字符串以供显示。通常情况下,将本地化字符串保存在实例变量中是为了下次我们需要它们,还是我在这里进行微优化,我是否应该在每次需要时重新加载字符串?
答案 0 :(得分:7)
微优化。首先使它工作,然后使其正确,然后快速。当你进入第3步,运行Shark(或乐器),然后按照它的指导。
答案 1 :(得分:7)
这是“依赖”答案之一。
调用NSLocalizedString涉及在bundle中执行查找。这些查找非常快,但不是免费的。是否缓存此返回值或只是调用NSLocalizedString的便利取决于它的使用方式。
如果您将返回通过 类似于文本字段 然后是UILabel或UITableViewCell 查找只会在你发生时发生 首先设置属性。
如果您在drawRect中使用它 然后调用只会查找 当您的视图需要时发生 经常重新粉刷, 很少,或从不。
如果您在游戏UI中使用它 屏幕每帧重绘一次 然后为这几个UI元素 查找可能会发生数百次 每秒一次。
我会说,对于像#3这样的东西,你应该从缓存结果开始。
对于其他人,请以最方便的方式编写它们,如果您的UI中存在性能问题,请使用Instruments缩小原因。如果它是NSLocalizedString,那么相应地优化它。
答案 2 :(得分:1)
我怀疑你没有太多的性能打击。 NSLocalizedString(key,comment)是一个转换为
的宏[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
如果没有基准测试,我不知道这有多贵,但我怀疑它并不太糟糕。我的感觉是,这不会成为您的性能瓶颈,但您可以随时运行Shark或Instruments,并在设备上运行应用程序时自行查看。