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

有帮助吗?

解决方案

这是“依赖于”的其中之一。答案。

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

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

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

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

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

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

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top