Iphone,对于定期更新的数据,NSUserDefaults仍然是最简单的选择吗?

时间:2011-04-08 15:46:13

标签: iphone objective-c ios

我一直在设计我的应用程序来存储本地用户数据,这些数据经过更改/排序和定期引用,存储为应用程序委托持有的全局变量,并通过以下方式引用:

appDelegate = [[UIApplication sharedApplication]delegate]

虽然看起来很有效但很可能不是最佳实践,在NSUserDefaults中保存相同的数据是否有任何缺点,考虑到数据本身是一些自定义对象的小数组,SQL Lite对我的需求似乎有点沉重并在启动时和整个应用程序中刷新。

是否存在本地存储的一般最佳做法,还是真的依赖?

3 个答案:

答案 0 :(得分:2)

我建议使用Core Data。虽然第一次经历可能有点混乱,但投资将是值得的。

答案 1 :(得分:0)

你做得很好。更好的做法可能是拥有一个包含所有相关数据的单例类。然后你需要的那一天你只需要调用[[globalData instance] arrayOfData]并拥有它。这样,您就可以将应用程序代表中的数据抽象为集中位置。

NSUserDefaults用于在应用启动之间存储信息。使用它来存储每次应用程序启动时读取的设置或事物,或使用它来保存应用程序的状态,以便用户可以重新启动并在退出后位于同一位置。除非您存储的数据相当大,否则没有任何明显的性能问题。

答案 2 :(得分:0)

  

考虑到数据我的需求   本身就是几个小阵列   自定义对象并刷新   启动并在整个应用程序中。

由于您当前的要求仅限于小型数组和自定义对象,因此可以使用NSUserDefaults。

但在使用NSUserDefault时,我们应该注意这两个事实。 1.)对于自定义对象,您需要使用编码协议使用NSUserDeraults直接保存它们。

2。)NSUserDefaults有时会显示奇怪的行为,如果我们没有正确同步它。你可以使用它的`[NSUserDefaults synchronize]。

当您使用相互关联的自定义对象时,应使用核心数据。因为它的对象关系映射和直接对象管理的概念非常好。{在较低层它使用SQLite}。

另一方面,SQLite相对容易实现,并且具有用于与系统交互的C api。在这里,您需要将自定义对象分解为属性并运行查询。