【问题标题】:NSUserDefaults - saving scrollView offsetNSUserDefaults - 保存滚动视图偏移量
【发布时间】:2012-11-03 14:08:48
【问题描述】:

这是我的代码:

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"scrolled!");
    [[NSUserDefaults standardUserDefaults] setFloat:self.mainTableView.contentOffset.y forKey:@"grTableCOy"];
}

正如您在每次用户滚动时看到的那样,我在 NSUserDefaults 中设置了一些值。只是一个问题-这有效吗?

NSUserDefaults 是在我每次设置新值时将内容保存到磁盘还是仅在调用同步方法时才保存?

【问题讨论】:

    标签: iphone ios xcode cocoa-touch nsuserdefaults


    【解决方案1】:

    我真的无法谈论您所做工作的性能方面。获得明确答案的唯一方法是启动工具,并在使用和不使用 NSUserDefaults 的情况下测量滚动视图的响应。

    关于它是否保存的问题?好吧,在这种情况下,访问文档应该可以回答这个问题。这是 synchronize 方法中的一个 sn-p:

    Writes any modifications to the persistent domains to disk 
    and updates all unmodified persistent domains to what is on disk.
    

    同样,确定性能问题的唯一方法是使用仪器进行测量。

    祝你好运!

    【讨论】:

      【解决方案2】:

      这样有效率吗?

      你真的是说高效吗?或者说“有效”?我认同。让我们看看:

      NSUserDefaults 是在我每次设置新值时将内容保存到磁盘还是仅在调用同步方法时才保存?

      两者都没有。它会定期保存其数据,因此不是每次设置它时,也不仅仅是在您调用- synchronize 时。但是,如果您想 100% 绝对确定您的更改已保存,您可以:

      • 每次设置一组数据后调用- synchronize,或者

      • 仅在应用程序即将进入后台或终止时调用的方法中调用- synchronize。这样您的数据将永远是安全的。

      编辑:所以你问的是真正的效率。好吧,由于NSUserDefaults 的行为与我描述的一样,您不必担心,它不会每秒对磁盘执行 100 次写入,并且由于您声明您在应用程序终止之前调用synchronize,因此您的数据是也很安全。

      【讨论】:

      • 我在 applicationWillTerminate 上调用同步。但这对节能有好处吗?我的意思是假设用户滚动表格。方法 didScroll 被触发了 100 次。 NSUserDefaults 可以说只保存 10 次,但这仍然是写入磁盘,所以它是节能的吗?那是我的问题。
      • @Devfly 如果您在applicationWillTerminate 中同步,那很好。 NSUserDefaults 不会在每次滚动时保存(仅在内存中设置底层的NSDictionary),因此您无需担心。
      【解决方案3】:

      NSUserDefaults manual 有一些关于缓存的信息,这部分应该回答你的问题;

      NSUserDefaults 缓存信息以避免每次需要默认值时都必须打开用户的默认数据库。同步方法会定期自动调用,使内存中的缓存与用户的默认数据库保持同步。

      换句话说,您的更改只是有效地存储在内存中,除非您手动调用synchronize,否则数据不会在您每次更改值时保存,而是定期保存。

      如果你真的想确保值被写入和存储,你可以调用synchronize 来手动实现。当应用程序即将终止时,这可能是个好主意。

      【讨论】:

        猜你喜欢
        • 2018-03-30
        • 1970-01-01
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        • 2020-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多