【问题标题】:nsuserdefaults synchronize method slows down the applicationnsuserdefaults 同步方法会减慢应用程序的速度
【发布时间】:2011-11-18 17:48:10
【问题描述】:

我正在循环中进行计算密集型操作(数百个用于迭代公式)。在每个循环中,直接从 nsuserdefaults 获取值并计算并保存回来。我的问题是,我每次写入时是否应该使用 -synchronize 方法nsuserdefaults?.我认为不使用这种方法。我的应用程序运行得更快。使用同步是否会减慢计算速度

【问题讨论】:

    标签: iphone performance nsuserdefaults


    【解决方案1】:

    使用同步会减慢计算速度吗?

    是的,当然。 synchronize 将当前用户默认值写入磁盘。

    每次写入 nsuserdefaults 时是否应该使用 -synchronize 方法?

    不,绝对不是。如果您有一个很长的循环,您正在更改用户默认值,则这些值将保存在内存中。它不会打乱你的计算。只有在循环完成后才需要保存到磁盘。

    synchronize 通常完成:

    1. 手动,在应用终止或发送到后台之前
    2. 系统每隔几分钟自动进行一次
    3. 在进行一些重要更改后由程序手动执行,您不想在发生崩溃或突然断电时冒丢失的风险。

    在你的情况下,在长循环之后,你想这样做是出于原因 3。

    在循环中每次都这样做,您只是将值不必要地写入闪存,您可能会立即将其覆盖。

    【讨论】:

      【解决方案2】:

      不!你不应该。在applicationWillTerminate 中考虑synchronize

      【讨论】:

      • 我的问题是假设在我的第一个循环中计算了一个值。基于这个值下一个循环计算工作,现在如果系统在循环时间内没有调用同步方法。计算会出错......如果我在应用程序中调用同步有什么用将终止??? ?
      • synchronize 代表写入磁盘。您可以在程序中使用NSUserDefaults 的共享实例(以及其中的值)。认为它只是一本字典。在程序结束时,您将这些值写入磁盘。
      • @debleek63:您应该将该评论添加到您的答案中,这是好东西。
      【解决方案3】:

      没有。从理论上讲,您根本不需要调用它,它会为您完成(它“定期自动调用”)。在实践中,最好在applicationWillResignActive: 中这样做。

      【讨论】:

      • 但如果循环时间小于更新间隔,我的计算会出错吗?
      • 不,synchronize 只是用您在内存中保存的内容更新“磁盘”。
      猜你喜欢
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多