【问题标题】:Is it bad to read or write to NSUserDefaults in a tight loop?在一个紧密的循环中读取或写入 NSUserDefaults 是不是很糟糕?
【发布时间】:2012-05-11 02:15:16
【问题描述】:

在 NSUserDefaults 中重复设置 key 对象是否有任何性能或其他后果?

[self.myDefaults setObject:someObject forKey:someKey];

和/或

anObject = [self.myDefaults objectForKey:someKey];

我的循环将在一秒钟内重复大约 100 次,每次只持续几秒钟。

我只会在循环结束后调用synchronize

【问题讨论】:

  • 你在做什么,你需要写这么多?
  • “循环”只是代表我阅读/写作频率的一个例子。我实际上在做的是响应平移手势的触摸事件。我正在考虑直接读写 NSUserDefaults 以保存使用额外变量的额外代码,并将这些代码设置为特定位置的默认值。
  • 你在保存什么到 NSUserDefaults 虽然也需要响应 UIPanGestureRecognizer?

标签: ios object loops nsuserdefaults


【解决方案1】:

NSUserDefaults docs 状态: "NSUserDefaults 缓存信息以避免每次需要默认值时都必须打开用户的默认数据库。"

因此,它与从内存中的字典变量中设置或获取对象没有什么不同。

但是,在类型循环中调用 [self.myDefault synchronize]; 会产生性能影响,因为这会打开并写入磁盘上的默认数据库。

【讨论】:

    【解决方案2】:

    据我了解,NSUserDefaults 并不是存储大量数据的最佳数据存储。对于较大的数据集,建议写入 plist 或 sqlite。用户默认设置只是针对一些用户偏好设置,而不是像典型数据库那样为“存储数据”而构建。

    不过,您不应该在循环中真正遇到性能问题,除非您要为每次迭代进行同步。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2011-05-09
      • 1970-01-01
      • 2018-01-20
      • 2010-10-18
      • 1970-01-01
      • 2013-04-17
      • 2012-02-17
      • 2011-09-20
      相关资源
      最近更新 更多