经常访问NSUserDefaults

时间:2011-05-24 17:49:05

标签: objective-c cocoa performance nsuserdefaults

在我的应用程序的逻辑过程中,我需要经常访问用户首选项,并且需要10到15次来确定需要处理的内容以及如何处理。可能这个问题不是关于性能,而是关于正确地做到这一点。

目前我每次需要申请价值时都会[[NSUserDefaults standardUserDefaults] valueForKey:...]。它是否正确?我认为将用户默认值“保存”为ivar可以减少额外的工作,但后来我想知道这是否会出现同步问题,例如用户是否更改了首选项并且只有在应用程序重新启动时才会更新(所以重新创建用户默认对象。)

还有更好的方法吗?

3 个答案:

答案 0 :(得分:26)

不要担心,它非常快,我不相信有更好的方法,这就是这个课程的使用方式。

NSUserDefaults类在内部缓存值,因此查找速度非常快。 [NSUserDefaults standardUserDefaults] 实例变量的开销非常小,如果您在代码中执行了500万次,就不会注意到它。

优化这一点的唯一正确方法是改进逻辑,使用指针缓存您自己使用的值,而不是NSUserDefaults基本上使用的字典等。

答案 1 :(得分:4)

如果将默认对象保存到ivar,则不会有任何问题。注意它是一个单例,它的指针不会改变。

答案 2 :(得分:2)

在此逻辑过程中,用户默认值中的值是否会随时间发生变化?

如果没有,您可以在开始时访问整个过程中需要的每个值,并将结果存储在局部变量中。

然后您可以根据需要多次使用这些变量,而无需每次都达到读取数据的用户默认值。

但是,如果在您的逻辑进程正在进行时更改这些值,那么从默认值访问它们可能是唯一的方法。

在性能方面,访问10-15次不会产生任何不利影响。如果您长时间每秒访问10-15次,那么您可能会遇到一些响应问题。