仅下载数据一次,然后在整个应用程序中访问; NSUserDefaults vs Singleton

时间:2014-06-13 11:51:52

标签: ios singleton nsuserdefaults

我必须在应用启动时从网络服务下载一次内容数组。然后,需要在稍后阶段在整个应用程序中访问此数据。我需要在每次发布时下载它的原因是内容可以随时更改。

我正在考虑将这个数组存储在NSUserDefaults中,因为它无论如何都可以访问。但我也考虑过创建一个单例类。根据我的理解,NSUserDefaults本身就是一个单身人士。

使用NSUserDefaults是不是为我的案例创建一个Singleton类?

3 个答案:

答案 0 :(得分:1)

使用NSUserDefaults存储此数据的问题在于,它的值会在应用程序的多次调用中持续存在。但是,您的应用程序会立即用启动时来自服务器的任何内容替换以前存储的数据,因此先前加载的数据会对设备的存储造成无用的负担。

当然,在NSUserDefaults中存储数据的一大优点是,当没有连接时,您的应用程序可以拥有一些数据。如果运行可能过时的数据比完全不运行更好,NSUserDefaults是一个有效的选择。

如果您只需要在应用程序运行时保留数据,则使用单例是更优化的解决方案。

答案 1 :(得分:1)

NSUSerDefaults会更好,因为他们有点像持久数据库,因为他们在应用程序终止后不会丢失他们的内容,而单身人士没有这种能力。

一条建议,如果您可以改变正在接收的XML结构或您的团队正在处理XML创建部分,那么如果您要求他们添加一个标签,例如" version = 1.0&#34,那将非常方便。 ;。每次打开应用程序时,都要下载数据,只需检查版本是否已更改,如果已更改,则更新您的NSUserDefault内容,否则请使用旧内容。只需添加一个标签来检查XML版本就可以省去很多痛苦。

答案 2 :(得分:0)

我不确定NSUserDefaults是否真的用Singleton模式实现。 [NSUserDefaults standardUserDefaults]也许是。

使用NSUserDefaults的优势在于,您可以将已下载的数据存储在用户设备中供以后使用,特别是在其他时间启动应用时设备未连接到互联网时。 / p>

如果您通过此数据初始化的对象的构建需要花费考虑时间,我建议您使用NSUserDefaults来存储离线数据,使用Singleton来确保所有内容都将在您的应用中构建仅推出。

同样重要的是要考虑NSUserDefaults只能存储NSDataNSStringNSNumberNSDateNSArray或{{ 1}}。如果您的数据不属于这些类型,我建议您在用户设备中保存文件。

单身实施:

NSDictionary

另外,我建议您使用AFNetworking进行WebService调用。它处理线程和东西,这样用户就不必等到呼叫完成才能打开你的应用程序。虽然不完整,但请使用以前下载的数据打开该应用。

希望它有所帮助!