【发布时间】:2009-03-01 23:11:33
【问题描述】:
我正在开发一个 iPhone 应用程序,我们正在为我们的初始版本进行英语和日语本地化。我们经常调用NSLocalizedString() 来加载适当的本地化字符串进行显示。将本地化的字符串保存在实例变量中以备下次需要时通常会更好,还是我在这里进行微优化,我应该每次需要时重新加载字符串?
【问题讨论】:
标签: iphone cocoa cocoa-touch
我正在开发一个 iPhone 应用程序,我们正在为我们的初始版本进行英语和日语本地化。我们经常调用NSLocalizedString() 来加载适当的本地化字符串进行显示。将本地化的字符串保存在实例变量中以备下次需要时通常会更好,还是我在这里进行微优化,我应该每次需要时重新加载字符串?
【问题讨论】:
标签: iphone cocoa cocoa-touch
这是“视情况而定”的答案之一。
调用 NSLocalizedString 涉及在包中执行查找。这些查找非常快,但不是免费的。是缓存这个返回值还是仅仅为了方便调用 NSLocalizedString 将取决于它的使用方式。
如果您将退货传递给 类似 a 的文本字段 UILabel 或 UITableViewCell 然后 查找只会发生在你 首先设置属性。
如果您在 drawRect 中使用它 调用然后查找将只 当您的视图需要时发生 经常重新粉刷, 很少,或者从不。
如果您在游戏 UI 中使用它 每一帧都会重绘屏幕 然后对于一些 UI 元素,这些 查找可能会发生数百次 每秒的次数。
我会说对于#3 之类的内容,您应该从缓存结果开始。
对于其他人,请以最方便的方式编写它们,如果您在 UI 中遇到性能问题,请使用 Instruments 来缩小原因。如果是 NSLocalizedString 则进行相应的优化。
【讨论】:
微优化。首先让它工作,然后让它正确,然后让它快速。当您进入第 3 步时,运行 Shark(或 Instruments),然后按照它的指导进行操作。
【讨论】:
我怀疑您不会对性能造成太大影响。 NSLocalizedString(key, comment) 是一个宏,可以转换为
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
如果没有基准测试,我不知道这有多贵,但我怀疑这还不错。我的感觉是,这对您来说不会成为性能瓶颈,但是您始终可以运行 Shark 或 Instruments,并在您在设备上运行应用程序时亲自查看。
【讨论】: