代码之家  ›  专栏  ›  技术社区  ›  Don McCaughey

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

  •  5
  • Don McCaughey  · 技术社区  · 16 年前

    我正在开发一款iPhone应用程序,我们正在对其进行英语和日语的本地化,以供首次发布。我们经常打电话 NSLocalizedString() 加载适当的本地化字符串进行显示。通常最好将本地化字符串保存在实例变量中,以便下次需要时使用,还是我在这里进行微观优化,每次需要时都应该重新加载字符串?

    3 回复  |  直到 16 年前
        1
  •  7
  •   Andrew Grant    16 年前

    这是“取决于”的答案之一。

    调用NSLocalizedString涉及在包中执行查找。这些查找速度很快,但不是免费的。是否缓存此返回值或只是方便地调用NSLocalizedString将取决于它的使用方式。

    1. 文本字段类似于 UILabel或UITableViewCell然后 查找仅在以下情况下发生 首先设置属性。

    2. 如果你在drawRect中使用它 调用后,查找将仅 当你的观点需要 经常重新涂漆, 很少,或者从来没有。

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

    我想说,对于类似#3的东西,你应该从缓存结果开始。

        2
  •  7
  •   Peter Hosey    16 年前

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

        3
  •  1
  •   Brad Larson    16 年前

    我怀疑你没有受到太多的表演打击。NSLocalizedString(key,comment)是一个宏,可以转换为

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

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