【问题标题】:Should I save strings returned by NSLocalizedString()?我应该保存 NSLocalizedString() 返回的字符串吗?
【发布时间】:2009-03-01 23:11:33
【问题描述】:

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

【问题讨论】:

    标签: iphone cocoa cocoa-touch


    【解决方案1】:

    这是“视情况而定”的答案之一。

    调用 NSLocalizedString 涉及在包中执行查找。这些查找非常快,但不是免费的。是缓存这个返回值还是仅仅为了方便调用 NSLocalizedString 将取决于它的使用方式。

    1. 如果您将退货传递给 类似 a 的文本字段 UILabel 或 UITableViewCell 然后 查找只会发生在你 首先设置属性。

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

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

    我会说对于#3 之类的内容,您应该从缓存结果开始。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我怀疑您不会对性能造成太大影响。 NSLocalizedString(key, comment) 是一个宏,可以转换为

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-07
          • 1970-01-01
          • 2020-06-12
          • 2021-12-20
          • 2019-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多