3

在我目前的新项目中,我必须从 Internet 获取大部分数据,并且下载数据的每个对象都必须在许多 View 控制器中使用,并且应该始终可用。问题是我应该将所有对象创建为每次对象未初始化时下载数据的单例吗?还是有其他有效的方法可以做到这一点?

4

5 回答 5

3

我应该将所有对象创建为每次对象未初始化时下载数据的单例吗?

不。不创建单例;)

这里单例的一个常见问题是,您未引用的内存在未引用时不会或无法轻松清除。

还是有其他有效的方法可以做到这一点?

NSURLCache对于您的使用来说,这似乎是一个很好的起点。如果您正在处理大型数据集,您可以创建多个缓存。它们可以减少多余的下载请求,并且可以按需存储和驱逐信息。

样本

网址缓存

介绍

http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/

于 2013-07-10T07:26:15.887 回答
1

通常,在您的情况下,您只会使用一个单例对象在您的应用程序中扮演模型的角色(如在模型视图控制器中)。因此,该模型将托管您从 Internet 下载的所有对象,甚至可以处理它们的更新、初始下载等。

如果您需要重构或重新设计,使用单个模型单例将提供更大的灵活性。

于 2013-07-10T06:39:29.747 回答
1

在您的情况下,我建议您不要在对象类中使用 Singleton。考虑到下载的数据可能会更改、更新或删除,我会在某处放置一个刷新按钮,并在按下它时重新获取数据。我也会从头开始创建对象,并避免使用 Singleton 类。

但是,如果您确定数据不会更改,请将任何下载的数据保存到 plist、核心数据等,并使用您保存的数据创建一个 Singleton 类。

于 2013-07-10T06:55:09.187 回答
0

我认为下面的帖子可能已经回答了您的问题

关于设计模式:何时使用单例?

希望这会帮助你。

于 2013-07-10T06:39:43.770 回答
0

也许这不是您发布的问题的答案,但我只是想帮助您。如果您有许多想要从任何控制器获取的对象,您可以使用Core Data. 在这种情况下,您将拥有整个应用程序的一个数据上下文。

于 2013-07-10T06:56:20.907 回答