在我目前的新项目中,我必须从互联网获取大部分数据,并且下载数据的每个对象都有用于许多View控制器,并且应该随时可用。问题是我应该创建所有对象作为singleton ,每次对象尚未初始化时都会下载数据吗?还是有其他有效的方法吗?
答案 0 :(得分:3)
我应该创建所有对象作为单例,每次对象尚未初始化时都会下载数据吗?
没有。创建无单身人士;)
单例的一个常见问题是,未引用的内存在未引用时不能或不能轻易清除。
还是有其他有效的方法吗?
NSURLCache
似乎是您使用的良好起点。如果要处理大型数据集,则可以创建多个缓存。它们可以减少冗余下载请求,并且可以按需存储和逐出信息。
<强>示例强>
<强>简介强>
http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/
答案 1 :(得分:1)
通常,在您的情况下,您只需在应用中使用一个单个对象扮演模型的角色(如在模型 - 视图 - 控制器中)。因此,该模型将托管您从互联网上下载的所有对象,甚至可以处理其更新,初始下载等。
使用单一模型单例可以提供更大的灵活性,以防您需要重构或重新设计。
答案 2 :(得分:1)
在你的情况下,我建议你不要在你的对象类中使用Singleton。考虑到下载的数据可能会更改,更新或删除,我会在某处放置一个刷新按钮,并在按下时重新获取数据。我也会从头开始创建对象,并避免使用Singleton类。
但是,如果您确定数据不会更改,请将所有下载的数据保存到plist,核心数据等,然后创建Singleton类使用您保存的数据。
答案 3 :(得分:0)
答案 4 :(得分:0)
也许这不是你发布的问题的答案,但我只是想帮助你。如果您想从任何控制器获得许多对象,可以使用Core Data
。在这种情况下,您将拥有整个应用程序的一个数据上下文。